PDA

View Full Version : Programming: some people can, some people can't?




5300cs
Feb 17, 2005, 12:51 AM
This may be more suited for the Community Discussion, but...

I've been trying to learn programming for a long, long time. The problem is that I just don't get it (I suck at it.) I've tried Perl, Java and C++ and find them extremely complicated.

I'm okay with foreign languages, for example I can speak Japanese, German and a little French. When I studied Japanese for example, I could usually see a logical connection between things; why this is so, and when this is here, this thing goes on the end of this verb, or whatever. When I'm looking at code for Java though, for example, I'm totally lost. I'll be reading a text book with simple step by step instructions and my eyes start crossing after like 5 minutes. All these libraries, all these classes...

I've heard that it's just not possible for some people to be programmers, and that if you don't keep at it, you won't be able to do it (duhh.) Is it personality-related? Do I need to be an analytical thinker? Good with math? Or am I just *sigh* stupid?

Any insight appreciated.

(I was an art major in school, if that helps at all.)



Mav451
Feb 17, 2005, 01:22 AM
I'm gonna tell you, I did VB (easy) in school, but when it got to C++ I really struggled.

Likewise, at college, Java and Matlab could easily destroy my will/confidence, and smash it into the ground. Let's just say I work ALOT harder than my peers who were good with C++.

I say you either got it, or you don't. Seriously. Its almost a talent thing. If you've watched Naruto, you will know there are two kinds of people in the world:
1) Genius-type
2) Hard-working type (no Bloodline limit).

I believe that applies here. If you don't got it, you're gonna hafta to work your ass off, and even then, it may not be good enough.

Demon Hunter
Feb 17, 2005, 01:27 AM
If it offers any insight, I'm a Japanese student too, and can only dabble in C++. The math just goes over my head in the advanced topics.

bousozoku
Feb 17, 2005, 01:32 AM
Rarely does programming relate to a human language. It's more like an algebraic equation with a beginning and an end with terms and factors in-between. Not everyone is logical--Art majors usually aren't. I remember spending twenty minutes explaining to someone how to set up a group of *or* and *and* conditions. She was nodding all the way through it and I kept asking if she understood. At the end, I got "huh?" and gave up. I'd trained other people in more complex situations but she just didn't get it.

Java is a language of research. For a while, you'll probably research every little thing, except maybe for System.out.prinln("Hello World!"); The trouble with Java is that it's huge. It's not just a language, but it's also a runtime environment and a plethora of library routines.

The following tips might save your sanity:

1) Learn the difference between a statement and a block. Blocks are bounded by braces {}. Statements and other blocks of code may be contained within them.

2) End statements with a semicolon.

3) Make certain your braces {}, parentheses (), and brackets [] are paired. A good editor will help you with that.

These tips work with most languages such as C, C++, Java, Pascal, and Modula-2. Hopefully, they will help you see more clearly.

Doctor Q
Feb 17, 2005, 02:15 AM
I read an article yesterday about the problems of learning modern programming languages. Programming languages have evolved much of the last few decades, but are often too complicated for beginners, and don't give a good feel for what the computer is actually doing under the hood.

The writer's theory seemed to be that students would do better by first learning an old, primitive language such as Fortran or plain BASIC (not a souped up object-oriented BASIC), before progressing to the languages we rely on today. When there is too much theory and too much complexity, students can't get that first "Hello, world" to run and get off to an unnecessarily slow start.

I'm not sure I agree with that, but I do know students who don't have a good idea how computers work, and just want to get their Java program working so they can turn it in by the due date. I've always been glad that I programmed in assembly language, C, and other low-level languages before I moved up the food chain, but maybe that's just because I feel more comfortable knowing how things work.

Some people are better suited to programming than others, but anybody with the time to devote to it should be able to learn some simple programming. I think more people would do well to start with a simple scripting language (and I don't mean AppleScript, which is not as simple to use as it is often made to sound), so that less effort is required to get the computer to do a few simple tricks, without all the baggage of learning object-oriented programming and a million rules about scope and structure. That can come later.

Mav451
Feb 17, 2005, 02:18 AM
Haha object-oriented. Everytime I hear that word it makes me cringe. Like listening to my Java prof droning on and on, while everyone nods.

Then when you ask a question, he denounces you publically in front of the whole class. In a word: Weeder course. I don't know how I did it, but I pulled an A- in that class, but I will forever hate programming for the kinda ***** I had to go through. Not fun.

dejo
Feb 17, 2005, 03:21 AM
One of my University of Alberta CS professors, Alan Supynuk, said that what makes a great programmer is the ability to use both sides of the brain equally, the engineer and the artist. He explained this by asking us to imagine we are standing on the top of the CAB (Central Academic Building) (almost the center of campus, too) and looking north. On the left are mostly the scientific/engineering buildings and on the right are mostly arts buildings. This is quite analagous to how the brain works. And a great programmer is able to borrow heavily from both sides. Good programming isn't just a science, it's also an art.

P.S. He also joked at our grad party that only a programmer would read the instructions on a shampoo bottle and think, "This is an infinite loop": Lather, rinse, repeat.

savar
Feb 17, 2005, 03:37 AM
I've been trying to learn programming for a long, long time. The problem is that I just don't get it (I suck at it.) I've tried Perl, Java and C++ and find them extremely complicated.

It's just like anything else: people are born with different aptitudes. I wouldn't say that Algebra is hard but some people just can't do it. On the other hand, I am awful at memorizing names and dates, so I struggle in History classes that other people think are easy.

However, I would be shocked if the average, college-educated, computer literate person was unable to learn the utter basics of programming. Keep in mind, its nothing like learning a spoken language. "Computer language" is a very misleading term.

The skill which is most crucial is being able to take whatever problem you want to solve and break it down...then you break down those bits even further. The CPU can perform only very primitive operations, such as load, store, basic arithmetic, and basic logic. You either need to break down your entire program into these primitives, or you need to find already-written code which accomplishes any number of the steps you have. This pre-written code usually comes in the libraries associated with each language. Perl and Java have very extensive libraries, for instance.

Of course, having a good memory also helps. If you can remember what libraries can perform which functions, and better yet what those functions are called and how to use them, then you will save yourself lots of time.

If you want to do anything with graphics, some basic algebra helps a lot. Advanced graphics requires a lot more math. Most other applications it doesn't matter.

I suggest that you learn Java. Focus on that one, if you are really determined to do this, and really understand it inside and out. If you need help working through a book or problem sets for a class, try out the newsgroups. There are tons of helpful people who hang out there and know absolutely everything there is to know about Java.

It also helps if you have a program in mind that you would like to write. My first program was Checkers...and although it was real basic I just sat down one night and started to write it until it was written.

I read comp.lang.java.help often...I rarely post questions anymore, I just enjoy reading the occasional theoretical debates that dig down into Java's core.

devman
Feb 17, 2005, 03:49 AM
not everyone is good at all roles. there's already some really sound advice and thinking been posted here (although, please don't learn BASIC first. "It is practically impossible to teach good programming style to students that have had prior exposure to BASIC; as potential programmers they are mentally mutilated beyond hope of regeneration." Dijkstra) :)

There does seem to be a correlation between musical talent and programming FWIW. I've not ever heard of the language correlation before.

Perl and C++ are difficult languages period. Especially C++. Java is what most colleges are teaching these days but it is a steep learning curve. there was a book some years ago called Java Gently which was aimed at people who had never programmed before. I've never seen the book myself though so this is secondhand info, but I had heard people say it was ok but that was 5 or 6 years ago now I think.

Look, at the end of the day maybe programming is not for you. That's cool. There's ton of other useful roles.

On a side note (and this is NOT advice for you) Someone else here said they're glad they learnt assembler. I could not agree more. Some say these days it's only C you need to learn to appreciate how systems work. I disagree. Nothing gives you the understanding of how computer architectures work better than assembler programming. But I'm old world. These days you do a 5 day VB course and "hey presto, I'm a programmer!"... (or even worse, you get one of these "teach yourself quantum physics in 24 hours" books)

Veldek
Feb 17, 2005, 04:09 AM
I'd recommend to start with function-oriented programming before dealing with object-oriented programming. But I agree that one needs good logic capabilities to be also good in programming.

arrakis73
Feb 17, 2005, 05:28 AM
...
I've been trying to learn programming for a long, long time. The problem is that I just don't get it (I suck at it.) I've tried Perl, Java and C++ and find them extremely complicated.
...


I am currently working under Windows, Linux, Mac Os X, Pocket PC using C, C++, C# and Java. I also had been developing for 5 years with Turbo Pascal (from 4.0 to 8.0)...

I used a simple method to learn a language:

1) identify a small initial application, which covers various "problems", like user interface, database or data archiving. A simple addreess book could be a quite good example.

2) Focus on a language initially. C is quite hard for someone which is not used to "pointers". I guess Java could be an easy language, since it is well documented and there is a GREAT LOAD OF SAMPLES and forums around the web.
I also suggest you to use Eclipse as IDE. It's fast and free.

3) Go to a bookstore with a good computer science section. Look at a good book with contents about your current objective. A book with MANY pages is not always a BIG book... Choose carefully.

4) Now you have a basic guide to follow. Read it and begin to build your "wanted" application. Try to break the application into "small" applications/functions (like saving a text file, opening a window, etc) and solve them in a separated way. Then put together all these small results to obtain your big final result. This is called "Divide Et Impera".

Your first application usually looks like an "experimental" app... but you will also be satisfied.

Symtex
Feb 17, 2005, 06:12 AM
I think one of the major hurdle that programmer faces is the lack of preparation works before "attacking the code". You've got to spend time doing Organigram and Flow chart. Work on your logic on paper. Visualize your program. You can even write speudo-code before "Coding".

For some, the preparation phase is all in their heads : It's a given talents. For others, thoses previous steps are necessary for making it.

(BTW, I've also starting to learn japanese, not that hard when you put your mind into it.)

Moog101
Feb 17, 2005, 06:36 AM
I've tried Perl, Java and C++ and find them extremely complicated.
I'm okay with foreign languages, for example I can speak Japanese, German and a little French.


I have exactly the opposite problem. I've been programming various languages for the last 10 years, C, C++, VB, Java, C# and found them all reasonably straight forward to pick up and start using them productively. But over the last 4 months i've started to learn Spanish, and am finding it exceptionally difficult. As with programming languages, everything seems to be logical, but with spoken languages there are so many exceptions to the rules it just seems down to pure memory.

To understand computer languages is just down to lots of practice. One day it'll just click and you'll suddenly think "Why didn't I realise that earlier"..

And no, I don't think you need to be good at maths to be a good programmer. I failed most of my maths exams at school and now i'm programming trading systems at a Investment Bank and getting on fine :D

ct77
Feb 17, 2005, 08:32 AM
Then when you ask a question, he denounces you publically in front of the whole class. In a word: Weeder course. I don't know how I did it, but I pulled an A- in that class, but I will forever hate programming for the kinda ***** I had to go through. Not fun.

The problem with many technical fields, including Computer Science, is that there is a lot of "alpha male" behaviour (from both men and women, students and professors). That is, people pissing on you because (in their view) you are "stupid", people pissing on you because you didn't choose "their way" to solve a problem, et cetera.

You got through your programming class -- so you've already got a leg up.

But don't give up on programming entirely -- there are a lot of people out there who will be helpful. And it can be fun -- I am dabbling in Applescript Studio, and am very close to releasing my first OS X-native program. :)

cubist
Feb 17, 2005, 08:55 AM
Programming calls for two skills IMO, visualization and memory. Visualization means to be able to picture in your mind an abstract thing which is doing things, the program or module. Memory simply means being able to remember thousands of nitnoidal facts - managing complexity, in other words.

I wouldn't worry about not being able to understand C++. C++ is a very badly designed language, originally intended as a technology demonstration, but it escaped from the laboratory. I imagine it will be dead in a few years. C will survive, and indeed the two languages you definitely should learn are C and Java.

It's become more evident the last few years that OOP has not delivered on its promises of code reuse and reliability. It's not too painful in Java, though, so you should learn it in that context.

Omen88
Feb 17, 2005, 09:35 AM
I definitely agree that there is a division between people who can program and those who can't (or just do it terribly). On the other hand I don't think it's a good idea to start off with C++ or Java.

C++ is a hard language and java is just bloated with all the libraries.

My first language I learned was Turbo Pascal about 8 years ago (at the age of 14). I complained and whined why we couldn't learn C or C++ to our teacher, but seen afterwards it was just a lot better to learn the basics.

At university the first language we learned was Scheme and again it is a very good language to let you learn the basics (especially for recursion, which is mostly avoided in other languages).

My advice is to start off with an easy language with a small vocabulary. And start off with console programming (GUI programming is hard compared to console applications). Try some easy C or Turbo Pascal generating output in the console.

And some (most) people just can't do it very well. Hopefully you're not one of them. I'd say only about a third of the programmers I know, programs well. You need to be able to make abstractions and divide problems into small, solvable subproblems.

VincentVega
Feb 17, 2005, 10:53 AM
These days you do a 5 day VB course and "hey presto, I'm a programmer!"...

Oh, god. I've come across people like that in jobs I've had in the past. They've been on a course and think they know absolutely everything and that their approach to programming is the best. Unfortunately for them, it's not. In one job I worked at, there was one guy to whom this applied 100%. He thought he knew everything but was without a shadow of a doubt, the worst programmer I've ever seen. His ignorance of his own failings was breathtaking (I used to moan about him with one of the other programmers). Once I re-wrote a load of his code (it was full of bugs and *very* inefficient) only to have him whinge and complain that I'd done it. My code was much more efficient and actually worked! He also had designs on being the lead programmer (despite being the least skilled) and used to pontificate regularly on how my coding style sucked and you should only declare one variable on each line and you should use Hungarian notation religiously. He was, in short, an idiot.

I agree that there's some people who can and some who can't, but I'd caution you on dismissing yourself prematurely. It takes a lot of effort and practice to become a skilled programmer. I started when I was seven years old and I'm still learning stuff now (22 years later). I started off with a version of BASIC (this was the days of type-in program listings in magazines), graduated on to C (fun), then VB (yuck), VB.NET (almost as yuck) and C# (which is my preferred language at present). I've dabbled in various forms of assembly language (6502, 68000, ARM) and C++ (fairly evil) as well. I also use Python for writing scripts.

I wouldn't start off with any of Perl, Java or C++. Try something like Apple Script, Python or PHP. Get a good grounding first and then move on to more complicated things. Don't shoot for the stars - start off small and then graduate on to bigger things.

Good luck!

jefhatfield
Feb 17, 2005, 11:15 AM
with computer languages, they are more like spoken/written languages more than math...but still they are in their own category and do borrow concepts from both...i have found that people who are good at learning foreign languages are the best programmers

the best programmers i have seen in school and in the field, i have been a techie for six years, are the foreigners...they are usually adept at foreign languages, especially since they came to the usa to go to school and/or to work in an environment where they had to excel at english to survive...i have met plenty of programmers who may not speak english like a native but can learn new computer languages very fast

...as far as learning in general, i either learn things very fast or very slowly but the subjects which take more time for me to grasp are also the ones i remember for life...subjects which i pick up immediately fall right out of my head once i don't use them anymore

where one has to struggle to learn, and keep at it for long hours over a long period of time are actually hard wiring the information into their brain...people who are brainwashed are not done so quickly or casually but through a long process over a long period of time

you may not become the best programmer by putting in the most time, but you will become a programmer eventually and the best programmer you could be...i doubt there is any such thing as a person who cannot learn programming

jefhatfield
Feb 17, 2005, 11:23 AM
i used to teach guitar and i met some people who were convinced guitar was not for them of that it was too hard to learn, preferring something more instantly rewarding like the drums

i found that relating guitar with songs that a person knows is actually the best way to teach a person the instrument...some more formal, or educated, guitar teachers like to teach the student music theory first and it causes many to get frustrated and think that "guitar" is too hard

michaelrjohnson
Feb 17, 2005, 11:27 AM
I can see where you're coming from... And I am one of those people that do agree with the statement that "some people aren't meant to program." While it may or may not apply to you, it's important to understand your own limitations. There is no sense for you to spend days/months/years of your life banging your head against a wall with something that you may never understand. There are much better uses of your time... go cure cancer or something. :) In your case, it may be the lack of a great instructor. This is often the inhibitor that many people experience. Find yourself a great book that speaks *your* language, and find someone who can help you and is *willing* to help you. That may be your key to success.

---------

As for me personally, I'm just starting out in C++ and I'm really wanting to explore programming on the Mac. Thus far, I've been using Microsoft Visual Studio .Net 2003. It works well enough, but it's not for my Mac. I have tried to kickstart Xcode, but I just find it difficult to use. Can anyone assist me in getting a good manual (or just a few tips) to make Xcode work for them in terms of streamlining their workflow? Thanks a bunch. I'm glad to see such a healthy programming sector on MR. :)

jefhatfield
Feb 17, 2005, 11:37 AM
if you are good at something, even great at it, it isn't for you if you hate it :)

i am good at public speaking and being around medium to large groups of people...i really don't have stage fright, but i really don't like to be around groups of people whether i am a participant or not

i enjoy solitude more than most people

some people find it funny when public figures or celebrities become recluses...people say "but they are so good at performing or doing concerts"...that may be, but many don't realize that many people in public positions/situations don't enjoy it

jsw
Feb 17, 2005, 11:48 AM
I've been a programmer for over 20 years, professionally for over 15, and here are some of my observations:

(1) While programming talent might or might not be "innate", people rarely seem to improve substantially after their first few years of starting. I am a fairly decent programmer, but I don't think I'm substantially better - or worse - than I was a decade ago. I think that people tend to "get it" (or not) after a reasonably small amount of time (at most, a few years, often much less). You learn nuances, but basic ability seems to either gel or not fairly quickly.

(2) I think programming is a lot like math in that (a) many people think its hard, which becomes a self-fulfilling prophesy, and (b) most people have no idea how to teach it correctly. So a lot of people learn it, while thinking it's impossible to do, from inept teachers. Math isn't all that hard - at least a lot of it isn't - and neither is programming. But people think it is, so it becomes that way for them.

(3) Maybe it is a good idea to start with something simple. I've moved on to Java from C++, and, earlier, to C++ from C, to C from FORTRAN, to FORTRAN from BASIC. Starting with BASIC on a TRS-80 Model III, when the language and system were so simple, made it easy to understand all that was knowable, in a sense, so I never felt like it was too much to grasp.

(4) To me, programming is a lot more like communication - specifically, writing how-to instructional manuals - than it is like math. By the time I got out of grad school in aero/astro engineering, I'd had more math than 99% of the population. 15 years later, I rarely if ever use math beyond that available on a $2 calculator.

(5) I've read here how a lot of people can learn languages but not programming. To me, they're very similar - programming is simply learning how to tell the computer what to do. People who learn languages by memorizing vocabulary and grammar rules aren't going to speak as well as those who know what they want to say and learn the language progressively so as to be able to communicate their thoughts increasingly well. Likewise, I think you learn to be a better programmer by first conceptualizing what it is that you want to do, then by learning enough of the language to be able to do that, and then doing more and more difficult tasks. Just like languages all come down to expressions of thought in sentences and paragraphs, programs come down to subroutines, each of which has a specific task.

(6) "Object-oriented programming" is a phrase that is often horribly explained. Here's what it means (probably another horrible explanation): when given a task (program) to do, figure out the parts and roles - they're the objects. Figure out what the parts/roles do - those are the methods. Figure out what the subparts or things they "carry" are - those are the member variables. If you were building a house, you'd have your carpenters, plumbers, electrician, architect, painters, etc. If you were building a car, the parts are obvious. Object-oriented programming merely means to use real-world analogies to help you conceptualize what you're going to do.

(7) Crappy programmers are often crappy explainers. Someone who can tell you how to do something in a clear, friendly way will probably be able to program well. Someone who could spend an hour telling you how to turn on a light will make a bad programmer. If there's any innate talent involved, it's visible through how a person can explain something (or give directions) to a child. Or, more specifically, how good they'd be at recording a video to do that and getting a bunch of kids to understand it (i.e., anticipating problems and providing answers ahead of time).

(8) As others have said, programming boils down to figuring out what you want to do, then figuring out how to use the language to do it. Yes, Java has a huge library which can do almost anything you want it to do, but the library is all built (well, mostly built) with Java itself, so not knowing the library doesn't mean you can't do something, just that you might need to write more code to do it. But, if you know what you want to do, you'll get it done either way. Likewise, to talk to someone, first you have to know what it is you're trying to say, then you figure out how to say it. Some languages make it easier to say some things than others, but almost any language will let you get the idea across.

Ultimately, I think almost anyone can program, especially if they are taught, at least initially, by someone good - just like anyone can learn to talk. But some people are just better at it than others.

jsw
Feb 17, 2005, 11:49 AM
if you are good at something, even great at it, it isn't for you if you hate it :)

i am good at public speaking and being around medium to large groups of people...i really don't have stage fright, but i really don't like to be around groups of people whether i am a participant or not

i enjoy solitude more than most people

some people find it funny when public figures or celebrities become recluses...people say "but they are so good at performing or doing concerts"...that may be, but many don't realize that many people in public positions/situations don't enjoy it
Hear hear!

I can (and have) spoken in front of thousands without any problem whatsoever. But put me in a party with a dozen people I don't know, and I hate it!

DavidLeblond
Feb 17, 2005, 12:19 PM
arrakis73 had probably the best advice. I've always found that if I just go into trying to learn a language I usually get frustrated quickly. Take Objective-C/Cocoa for example. That looked new to me, and I could never get it right. So what I did was I just set out to write a program (in my case a book logging progarm) and that kept me focused. Right now I'm working on stuff in C++ dealing with SSL, something I have no experience with... but since I have a goal and deadline in mind (getting paid to do it doesn't hurt) then I have motivation to learn and get it done.

Motivation is the key in programming. Motivation, patience, and logic. All the rest is just syntax.

snkTab
Feb 17, 2005, 05:07 PM
I think programming or other such topics where you have to bend your mind away from normality and try to grasp the big picture and the details at the same time is a "click" subject.

What I mean is, you suck at it and then... CLICK. You understand. For instance I sucked at Java. Not bad mind you, but I did a lot of advanced stuff that I really didn't know what I was doing at the time. Then 3 years later, after not programming Java I do a little bit and then I fully understood everything I couldn't exactly grasp 3 years ago. For me, I had to fully abstact myself from programming to understand it.

It does take a maturity(not really an age maturity) of the mind to grasp some topics.

jywv8
Feb 17, 2005, 06:30 PM
I've been a programmer for 8 years. I always recommend that people start learning programming with C. I started out with Pascal, then moved on the C, then Java, then C++, and I picked up Perl, PHP, and Python along the way. For me, I think starting out with C++ would have been overwhelming, and Java doesn't teach you basic memory management fundamentals.

Programming calls for two skills IMO, visualization and memory. Visualization means to be able to picture in your mind an abstract thing which is doing things, the program or module. Memory simply means being able to remember thousands of nitnoidal facts - managing complexity, in other words.

I completely agree about visualization and managing complexity. I find it very difficult on work on a system when I don't have a general "map" of it in my head. To this list of skills, I would also add "patience" and "attention to detail". On a bad day, programming is a PITA. On a good day, it's like doing a puzzle. I like puzzles.

I agree with jsw:

Ultimately, I think almost anyone can program, especially if they are taught, at least initially, by someone good - just like anyone can learn to talk. But some people are just better at it than others.

Mav451
Feb 17, 2005, 06:34 PM
...
There does seem to be a correlation between musical talent and programming FWIW. I've not ever heard of the language correlation before.
...

I wish man. 8 years of piano, and 6 years of percussion/drums. 5 years of all-county/all-state band.

...Didn't help one bit in my programming -_-.

And explaining something? I've taught a ton of people on how to build PCs, and my writing is pretty decent (A's in both Freshmen and Junior English, the latter being Technical Writing). If you doubt my writing skills, I can send you some of my material (the latest being an overclocking guide for Technical Writing).

Doctor Q
Feb 17, 2005, 07:12 PM
Another thing to consider is that almost anybody can be forced at gunpoint (or, more appropriately, gradepoint) into getting through a programming class, but your personality may determine whether you like doing this sort of activity.

Thinking logically (considering all cases and what could go wrong) and writing algorithms for what is a rather stupid beast (it follows directions instead of using any common sense) is normal for Vulcans and certain other species. Other people consider such work tedious. It's not talent, it's interest.

If you consider every program to be a fun coding challenge, so be it. If you consider it a chore, so be it

Sometimes it helps to "think like the computer" when programming and this comes more naturally to some people than others. A primitive example:

Suppose the computer sees "10,240" and complains that you typed a list of numbers when it wanted a single number. If you think about how it parses text, realize that it thought the comma was a list separator, laugh, consider it YOUR error, and try not to do it again, you're handling the problem like a programmer.

If, instead, you say "stupid computer", type "10,240" again, see it fail again, and then throw the whole machine out the window, you may not have the right personality for this particular profession or hobby.

And if you rewrite the parser on the spot so it handles commas differently, things are looking really good for you!

notjustjay
Feb 17, 2005, 07:30 PM
Wow, neat thread, lots of cool input and advice.

I would second the notion of learning a simpler, procedural language first. I started off programming in the 80's with Applesoft BASIC on the good ol' Apple ][. I learned a lot through trial and error and from typing in program listings from magazines like Nybble and Compute! (oh man was I ever a nerd ;) ). From there I went into Microsoft QuickBASIC for DOS (at least, the dumbed-down QBasic interpreter that they included with every version of DOS past 5.0), then in high school I learned Basic and Pascal on the Mac. I was also teaching myself C at home, and in university we did C++ and Java. I've since also picked up PHP.

I actually would NOT recommend PHP as a starter language because its paradigm is so different and since it doesn't really do you much good outside of a web server.

I can see why learning C++ or Java might be hard for a complete beginner, I mean look at what you have to do for a simple "Hello World" program:

public class HelloWorld {
public static void main() {
System.out.println("Hello world\n");
}
}

When all I ever did in BASIC was:

10 PRINT "HELLO WORLD"

:)

(then of course, you add 20 GOTO 10 :D )

5300cs
Feb 18, 2005, 07:36 AM
Wow :eek: So much advice from everyone. Thanks!!

I had thought that trying to tackle a difficult language first would be difficult, but then I remember reading in a book that if you learned C first, you'd have to un-learn things to start with Java :( So I thought that if I started with BASIC or something, then I'd be wasting my time because a.) it's a dead language (maybe) b.)it uses a different syntax and c.)doesn't help me in the future.

I'm envious when I hear people talking about how they used to program games in their spare time when they were young, like dice rollers and dungeon exploration games, etc. I wish I could do the same.

Also programming might be something that I could put on my resume if I ever became proficient enough to do something useful with it, or ended up making something useful. For example, I wanted to make my own text editor, or AIM client.

Thanks again for all the advice and keep it coming! :D

broken_keyboard
Feb 18, 2005, 08:03 AM
I started programming when I was 8, going in to school early in the morning to use their computer. I am now 30 and have been a professional programmer all my life.

I just want to say that I sympathize with people starting programming today. The languages I started with were much more designed for the hobbiest, but today's languages (such as Java) are often designed with business in mind. These days people have to be a lot better at separating out the essential from the non-essential, because there is a lot more of the inessential.

applekid
Feb 25, 2005, 09:48 PM
As long as it's not too late to throw in my comments...

I think that article Doctor Q is pointing out is right.

I learned BASIC when I was 10. I came across my dad's old FutureBASIC books, and since I still had the floppies, I installed it on our Quadra 650. My dad quit learning to programming for some reason. I don't know why he picked it up in the first place either. He has tons of old C programming books on his bookshelf, but it seems like it was all a wasted effort.

Anyhow, I programmed a few simple text-based programs and was excited. So, I wrote some stupid text-based games and demos for fun. The FutureBASIC package came with a very thin book of examples and problems for you to solve. Through those examples, I learned simple things in BASIC.

Anyways, I struggled figuring out BASIC on my own. I wasn't able to move forward from those simple text-based programs. I aimed to make simple games (my goal was to make a Donkey Kong-clone. On the Mac, I have never seen a good Donkey Kong clone!), but I couldn't get graphics to draw or anything. So, I took a hiatus.

Come back to age 14, in high school, taking Computer Science 2 in my freshman year. I skipped CS1 because I was able to prove my computer skills. Anyways, my teacher... Well, he knows his stuff, but does not teach it to us. Our CS2 class was all about Java, when the county's curriculum was for C++. He wanted to teach us Java because it was new and the AP exams were going to be based on Java. He didn't know a lick of Java and was teaching himself at the same time. That did not help our cause because we were the guinea pigs.

Our first Java programs were all done in one class and in the main. What a breeze. It was like going back to the BASIC days... Then, we somehow jumped into OOP. He demanded we split up our programs into two classes. He didn't even tell us how! So, for a week, we struggled with a particular program. Then, he went over some code with us to work with since we had so much trouble (except for one kid, more on him later). He sorta explained the concept of OOP and all that jazz. Still didn't make sense to us.

I took the code home, read over it, and tried to figure it out. I did this for two weeks. A few kids managed to figure out how to do program, luckily. But, for the majority of the class, we didn't know ***** still. So, came the midterm, I got a C. Two B's for the quarters so I was guaranteed a B for the year. I went back to my code. It still didn't make sense. Then, it finally hit me. All of the class declarations were like declaring variables. You type the class's name, a name for what I think of as a variable, equals, new, class name(). Of course, I later learned about parameters. But anyways, I taught myself that much. I figure out methods easily right after that. I finally had a basic understanding of Java.

After that, I got A's for the next two quarters, I taught my peers, we worked together, and figured out our programs. Programming became a cinch. We figured out we had to demand our teacher to sit with us and keep him still, in order to get help with our programs.

The next year, I took CS3. Aced that class. Most of my classmates from last year failed to join me. Only, I think 6 kids from my class joined me. The rest of the CS3 class was from a different CS2 class that actually learned C++, and learned OOP, and understood programming. Anyhow, I was near the top of my class in CS3. Programming was so easy because it seems like our CS2 class was based on a curriculum for the CS3 AP class. So, when the AP exam came, we were extra prepared. I got a 4. It's good, but most of my class got a 5 (we have so many over-achievers).

I moved up to my current CS4 class. Many more people dropped out of CS. But, now, for some reason, our teacher is a complete jerk. He used to be quite lenient with programs, but now he has really short due dates and makes us do ridiculously hard programs. It's like CS2 all over again. And my grades show it. He's moving to a new school next year, so some of us assume he's disgruntled. He does do more in-class teaching, but he's making us way too prepared for the Computer Science AB exam. And it's just become stressful again.

Oh, that kid I was talking about earlier. Well, he knew his stuff with computers. But, that first day we learned Java, he didn't know how to even type one line of code. We had our simple programs up and running, but this kid did and knew nothing! The screen was blank. I assume he got help from our teacher and learned Java during one afternoon. The next year he was in CS4, not CS3! It doesn't make sense...

Anyways, in summary, it helps to have a teacher that knows what they're doing. I found all books to be useless. I tried teaching myself C++ between my education of BASIC and Java, but books weren't the same as someone teaching you. Even if my teacher wasn't very good, he taught a few simple things that made quite a difference. It also helps to have friends learn with you. In CS2, I had only one friend in that class, but he was just a failure and ended up dropping out. CS3, everybody in the class was my friend. And CS4, I only have three friends with me. It relieves some stress when you code with friends. For Java in particular, java.sun.com is all you need. The forum often has useful examples and the API defines everything you need.

So, I suppose certain people are cut out to be programmers. But, let me say I'm either pursuing something I really shouldn't be (seeing my many failures), or I'm the low-end as far as programmers go (again, seeing my many failures).

Mav451, I'm a little disappointed that University of Maryland (College Park, I assume?) sounds like it doesn't have a good Computer Science department. My teacher always raves about them and things.

virus1
Jun 1, 2005, 04:17 PM
maybe this is the right place to ask for help. I figure the best dev environment for the mac is obj c because it is oo and it gets cocoa. (so does java but i chose obj c.. sue me) so i got the basics down kinda. im loose, but i understood it. now as soon as i got into cocoa and trying to understand the classes that make things work, i hit the wall. i feel like i took one step forward and 2 back because now im wondering if i got the basics right because this stuff is so confusing.. i wonder if i am in the category that everybody else here is in.. ive been struggling with this for a while.. i figure i better learn now or never cuz my little brains still developing.. 13 yo(thats 13 years old.. not 13 yo! i don't try to be 'from da hood').. HELP ME OUT

Omen88
Jun 1, 2005, 04:31 PM
maybe this is the right place to ask for help. I figure the best dev environment for the mac is obj c because it is oo and it gets cocoa. (so does java but i chose obj c.. sue me) so i got the basics down kinda. im loose, but i understood it. now as soon as i got into cocoa and trying to understand the classes that make things work, i hit the wall. i feel like i took one step forward and 2 back because now im wondering if i got the basics right because this stuff is so confusing.. i wonder if i am in the category that everybody else here is in.. ive been struggling with this for a while.. i figure i better learn now or never cuz my little brains still developing.. 13 yo(thats 13 years old.. not 13 yo! i don't try to be 'from da hood').. HELP ME OUT

I recognize my childhood dreams I had at your age :) But back at that time programming was easier to learn in my opinion. I have learned a lot of languages and frameworks, and I must say Objective-C with Cocoa has a really steep learning curve (the steepest I have ever came across).

I'm 23 now, doing my 3rd year Master of Computer Science (I first did a prof bachelor CS). And I still find Objective-C pretty hard. Once you get it, you'll never want to do it in any other way. But boy it can be hard to get it.

Now I don't want to demotivate you. 13 is a great age to learn programming (you still have lots of room in your head, and lots of free time :). Start with very simple applications, congratulate yourself when you succeed, because making any cocoa application at 13 is a great accomplishment. And if possible find someone who has experience in Cocoa, and get them to teach you. Although chances are small you'll find someone (I never got help when I was young).

I hope you don't give up and get the hang of it. And I'll be glad to help you out if you have problems with something (look at my profile for Instant messaging).

Doctor Q
Jun 1, 2005, 04:43 PM
Rather than feeling lost in a huge library and wondering how to use it, I think you'd be better off starting with existing programs for which you have source code and analyzing how they work. Then see if you can make a few tweaks to some of them. That's a lot easier than writing your own program from scratch.

virus1
Jun 1, 2005, 04:48 PM
I recognize my childhood dreams I had at your age :) But back at that time programming was easier to learn in my opinion. I have learned a lot of languages and frameworks, and I must say Objective-C with Cocoa has a really steep learning curve (the steepest I have ever came across).

I'm 23 now, doing my 3rd year Master of Computer Science (I first did a prof bachelor CS). And I still find Objective-C pretty hard. Once you get it, you'll never want to do it in any other way. But boy it can be hard to get it.

Now I don't want to demotivate you. 13 is a great age to learn programming (you still have lots of room in your head, and lots of free time :). Start with very simple applications, congratulate yourself when you succeed, because making any cocoa application at 13 is a great accomplishment. And if possible find someone who has experience in Cocoa, and get them to teach you. Although chances are small you'll find someone (I never got help when I was young).

I hope you don't give up and get the hang of it. And I'll be glad to help you out if you have problems with something (look at my profile for Instant messaging).
i already have sombody that is helping me. the only problems are that he is very busy, and lives in canada, so we can only communicate via email and aim. thanks for the support.

Doctor Q
Jun 1, 2005, 05:32 PM
i already have sombody that is helping me. the only problems are that he is very busy, and lives in canada, so we can only communicate via email and aim. thanks for the support.Somebody with experience sitting next to you is the ideal, but having people to help, even remotely, is handy too, as are tutorials and books. I've found Apple's developer tutorials to be pretty good.

MarkCollette
Jun 1, 2005, 05:53 PM
I'm going to break my advice into two posts, so the different ideas can stand on their own.

First, the question of whether programming is for you:

- Do you look at the world around you with curiosity?
- Do you think about how every large thing is composed of smaller and smaller parts?
- Can you plan something out, methodically, step by step?
- Can you take each of those steps, that anyone would take for granted as being completely obvious, and break them up into even smaller steps, so that a complete and utter idiot (computer) could get it done?
- Can you take multiple competing criteria, and find a solution that meets all needs?
- Can you compromise?
- Would you be comfortable describing yourself as a professional problem solver?
- Can you think analytically, scientifically, and logically?
- Do you want to spend the rest of your life learning new things?
- Can you, given a good book or website, teach yourself?
- Do you want to create?

Mechcozmo
Jun 1, 2005, 06:25 PM
I am a programmer. Kinda.

Learned C++ in Visual Studio 6.0 at a summer camp. Did that enough years that I was beating the counselors at programming. My crowing achievement: a program that counted to the number you set, and would allocate memory along the way. So enter "100" and thats how much memory it would take up. Make a big enough number and you could crash the computer. Forgot most of it however...

Took Computer Science in 9th grade. Was supposed to be Java (AP class) but so much of the class failed we fell back to Visual Studio.NET which isn't the most useful of languages. I've found that its easy to make code but I'm often frustrated at the lack of power and lack of ability to bring it to other places. Basically, it is Windows only.

Learning C++ (again) now. Going nicely in Xcode. I'm hoping to, by the end of the summer, be able to make C++ programs that may not be the best in the world but can do anything I want them to do.

MarkCollette
Jun 1, 2005, 08:14 PM
How to learn to program, from my experiences:

Learn some simple Math. Junior High or Senior High level should suffice to begin.

Learn the Scientific Method. It directly relates to Computer Science. This should take less than an hour.

Learn binary, octal and hex. Be able to add, subtract, multiply in these bases, using paper and a pencil. This should take a day or two.

Learn the logical concepts of AND, OR, NOT, XOR, and how this applies to binary values. In short, learn boolean algebra. If you've learned set theory or formal logic then this should be a rehash. This should take a few more days.

Now that you understand the theory of how a computer represents its data, and what mathematical operations it can do to that data, you need to learn how that works in practice. That is, you have to learn how instructions and data are stored in RAM, and how the CPU accesses and executes them. This will be in my next posting.

Take a simple language like C or Pascal, and learn the following concepts:
- Data types
- How to print something out
- Variables
- Arrays
- Flow of control
- Looping
- Functions
- Structures
- More complex input and output (files)

Program with this model for at least two months, if not longer, before moving on to a language like Java to learn Object Oriented Programming. Focus on that paradigm, and explore making graphical programs for another two months.

Congradulations, you are ready to START to learn Computer Science.

MarkCollette
Jun 1, 2005, 08:21 PM
Everyone will tell you to learn a high level language like Java first. They're wrong. The best approach is to start at the lowest level possible and work your way up.

Master one level, and then you will comprehend the abstractions and shortcuts of a higher level.

Plus, when something fails, sometimes you need to fallback to simpler levels, to know what's "really" happenning.

All very good programmers know how a computer works at a low level, even if they only program it at a higher level.

Many poor programmers do not understand the low level concepts, and so have no basis to understand the higher level ones.


We'll use a theoretical architecture as a model:

CPU
- Two registers R0, R1 which are referenced as 0 and 1
- Registers are 8 bits large (so you can do math on paper easily)
- Instructions are all 2 bytes or 16 bits large
- A CPU reads in an opcode, interprets it, and executes it
- CPUs only understand bits and bytes, nothing else. When you think of letters and words and pixels and pictures, those are all just things that we can represent by numbers. And numbers are represented by bits and bytes.

Memory (RAM)
- 256 bytes of memory, at locations 0 to 255 inclusive
- A single location is 1 byte or 8 bits
- A location could hold one number that would fit in a register
- Two adjacent locations could hold an instruction, which the CPU could execute

Opcodes Instructions
---------------------
0x0000 HALT (this ends a program)
0x1raa LOAD into register r from address aa
0x2raa STORE from register r into address aa
0x03sd ADD source register s into destination register d
0x04sd SUB (subtract) source register s from destination register d
0x05sd MUL (multiply) source register s into destination register d

0x30sd AND source register s into destination register d
0x31sd OR source register s into destination register d
0x32sd XOR source register s into destination register d
0x330d NOT destination register d
0x340d CLR (clear) destination register d to zero

0x40sd CMP (compare) source register s to destination register d
0x41aa JL (jump if s < d) to address aa
0x42aa JLE (jump if s <= d) to address aa
0x43aa JE (jump if s == d) to address aa
0x44aa JGE (jump if s >= d) to address aa
0x45aa JG (jump if s > d) to address aa
0x46aa JMP (unconditionally jump) to address aa

Assume that when starting up, the CPU starts by executing the instruction at address 0x00.

Let's make a sample program that takes two numbers from memory, adds them together, saves that to memory, and then halts.

Location Instruction Opcode
----------------------------------
0x00 LOAD R0, 40 0x1040
0x02 LOAD R1, 41 0x1141
0x04 ADD R1, R0 0x0310
0x06 STORE R0, 42 0x2042
0x08 HALT 0x0000

Location Value
---------------
0x40 0x23
0x41 0x0F
0x42 0x32 <-- This value was filled in when running program

Test math on paper:
0x23 => 2*16+3 = 35
0x0f => 0*16+15 = 15
35+15 = 50
50 = 3*16+2 => 0x32

Now let's try an example with a condition. In a higher level language we use IF and ELSE IF and ELSE so that we can conditionally execute code depending on some criteria. With the ability to branch/jump/goto based on the outcome of a conditional test, we can implement IF, ELSE IF, ELSE.

Real world example: Movie tickets cost different amounts if sold to children, adults or seniors.

Higher level programming example:

IF age < 18
cost = 5
ELSE IF age >= 65
cost = 4
ELSE
cost = 8

Lower level example:

The first thing we have to do, is realise that sort of 2 dimensional view of higher level languages, where they "nest" code simply does not exist from the CPU's perspective. To the CPU, everything is 1 dimensional and linear. It just does one thing after the other. So, we have to rearrange our code into a series of conditions and jumps (gotos).

Here's one way, which jumps based on the opposite test, but where everything's laid out in the same sequence as the higher level code:

IF age >= 18 GOTO AdultOrSenior
cost = 5
GOTO HaveCost
AdultOrSenior:
IF age < 65 GOTO Adult
cost = 4
GOTO HaveCost
Adult:
cost = 8
HaveCost:

Here's another way, which does the test the same as the higher level language, but where everything's laid out in the opposite sequence as the higher level code:

IF age < 18 GOTO Child
IF age >= 65 GOTO Senior
cost = 8
GOTO HaveCost
Child:
cost = 5
GOTO HaveCost
Senior:
cost = 4
HaveCost:


So we see that where something is straightforward and simple in a higher level language, there might be many complex ways of doing it in a lower level language.

Here's the second method reduced to a lower level:

Location Instruction Opcode
----------------------------------
0x00 LOAD R0, 0x40 0x1040 # IF age < 18 GOTO Child
0x02 LOAD R1, 0x41 0x1141
0x04 CMP R0, R1 0x4001
0x06 JL 0x12 0x4112

0x08 LOAD R1, 0x42 0x1142 # IF age >= 65 GOTO Senior
0x0A CMP R0, R1 0x4001
0x0C JGE 0x16 0x4416

0x0E LOAD R1, 0x45 0x1145 # cost = 8

0x10 JMP 0x18 0x4618 # GOTO HaveCost

0x12 LOAD R1, 0x43 0x1143 # Child: cost = 5

0x14 JMP 0x18 0x4618 # GOTO HaveCost

0x16 LOAD R1, 0x44 0x1144 # Senior: cost = 4

0x18 STORE R1, 0x46 0x2146 # HaveCost: (save away cost into RAM)
0x1A HALT 0x0000

Location Value
---------------
0x40 0x19 <-- age we'll pick 25. 25 = 1*16+9 => 0x19
0x41 0x12 <-- age of adult 18 = 1*16+2 => 0x12
0x42 0x41 <-- age of senior 65 = 4*16+1 => 0x41
0x43 0x05 <-- cost for a child
0x44 0x04 <-- cost for a senior
0x45 0x08 <-- cost for an adult
0x46 0x08 <-- cost that we calculate to charge


As an aside, a lot of higher level programmers don't know what pointers are, but low level programmers do.
In memory, we have locations, and what's actually at that location. Think of each location as a little bucket that can hold an actual value.
In the above example, location 0x46 holds the value 0x08. So, we could pass around the value 0x08, or we could pass around a pointer to it, which would be 0x46.

That is, I could tell you the cost of $8, or I could tell you where to go ( location 0x46 ) to get the cost. The pointer is 0x46.

Mechcozmo
Jun 1, 2005, 09:05 PM
<snippety>

Your post took me a few reads, but I understand what it is saying in that code block. Really freakin' cool!

Blackjack75
Jun 1, 2005, 10:13 PM
I agree with the previous post: it is very important to _know_ what happens behind when you use a high level programming language. For example if you write java games on mobile phones (a 64k jar on a nokia series 40), you need to have knowledge of what is big, what is not and what's slow or fast.

I remember having been contracted to do "some optimization" work on a J2ME game (a sort of arkanoid clone). I ended up nearly rewriting everything ... Well that was not very cost-effective for me but at least I had a good laugh. The original author of that particular program, for example was instantiating a new Date object in a loop that got executed several times in the main drawing thread.. just to get the current time from it. In a java game, if you want to know how many millisecondes where elapsed you can just call System.currentMillis() to get the current time in milliseconds. That's just one method, doesn't require allocating anything in memory and returns a simple value. If you just apply the example you were taught in class in the wrong context it gives such absurd results.

Someone who had only a very academic java course and no knowledge of the CPU work happening behind can only end writing monster bloated code. So yes at some point, learning some assembly is really a good thing. While I don't think you should start programming in assembly you should at least know it's the real thing and everything ultimately translates into opcodes and data being copied back and from registers.

For example in java or C code.. imagine a loop that adds oranges and apples to the fruit total. This will be executed several times in the loop so optimization is important (the fruits could get rotten if the loops is too long to finish :-))

a) human thinking loop
for (int loop=0; loop!=1000; loop++)
{
fruits = fruits+(apples*sizeOfApplePack);
}

//while looking more compact is actually slower than

b) computer-thinking like loop

final int applesTotal =apples*sizeOfApplePack;
for (int loop=0; loop!=1000; loop++)
{
fruits += applesTotal;
}

Because once translated into java opcodes or machine language:
a) on EACH loop, 6 ops*1000 = 6000 ops
- load apples into CPU register B
- load sizeOfApplePack into CPU register C
- multiply register B by register C
- load fruits into CPU register A
- add register B to register A
- store back register A into memory address of fruits

b)
//Before the loop (done only ONCE)
- load apples into CPU register B
- load sizeOfApplePack into CPU register C
- multiply register B by register C
- loads fruits into register A only ONCE before the loop

//on each loop, only one op.. * 1000 = 1000 ops:
- add register B to register A

//after loop
- store back register A into memory address of fruits

Of course a smart compiler could cancel this difference easily. I was trying to make example simple enough so I could understand it myself :-)

whooleytoo
Jun 2, 2005, 02:38 PM
Very interesting thread!

It's certainly a question of aptitude. I'd like to think I'm a very good programmer, but an utter disaster area when it comes to keeping accounts and budgeting. I STILL can't figure out where "balance sheet" gets its name!
(Mine never do..)

One of the core skills in programming I believe is the ability to take a large, overwhelming problem and break it down into minute problems that you know you can fix.

So, instead of trying to build a house, you first figure out how to put one block on top of another without them falling down. Then, repeat until you reach the next problem.

It's as much about confidence in your ability as about skill. I'd estimate most developers have no idea how to accomplish their next project, but they're confident they'll do it by breaking it apart as above. Experience is the only way you'll build that confidence, and deadlines are the best motivation to get that experience!! I probably learnt more in the last 6 months of commercial programming than I ever did in several years of hobbyism.

One final bit of advice for any 'learner' programmers - if you're looking for a project to start off with, make sure it's something very simple, make sure you do it well, and most importantly make sure you finish it! It's a far more valuable and rewarding experience than attempting a more challenging project, doing it poorly and not finishing it.

Happy coding people! ;)

whooleytoo
Jun 2, 2005, 02:40 PM
Your post took me a few reads, but I understand what it is saying in that code block. Really freakin' cool!

Yup, and it's all important to know. (Though it perhaps could use a brief explanation of what's a register, what's an opcode etc.)

plinden
Jun 2, 2005, 03:29 PM
... low level code snipped ...


Oh kerrist, that brings me back. I remember writing machine code by hand for the 6502 microprocessor. One of the coolest things I did was add some machine code to handle user input (just to change direction using the arrow keys) in a centipede game written in Basic. Before I added the machine code, it was sooooo sloooooowwwwwwwww. Afterwards it was actually playable.

I miss that.

I was such a nerd.

Doctor Q
Jun 2, 2005, 06:25 PM
<soapbox>

I have "professional disagreements" with educators who think you should start with assembly language programming and work your way up. I agree with the "up" direction, but not with the starting point.

I think it's useful to learn about assembly language programming, and the fact that computers have registers, opcodes, instruction sequences, and what RISC, CISC, pipeline, multiprocessor, interrupt, and other terms mean, but I think it is not the best use of time for university students to spend weeks hand-writing their own SPARC code, as at least one university program I know currently favors. That's like having homebuilders grow the trees instead of starting by buying lumber. It's worth understanding low-level computer principles, but assembly-level coding, even for embedded systems, is less important each passing day and is better left for experts or specialists. It shouldn't be put there as an obstacle (which it often is) for beginning programmers.

That said, I think you appreciate and understand modern programming better when you understand what the machine actually does, what an interpreter like BASIC does, what a language like C or C++ is best (and worst for), and why languages like Java and Objective C have their current positions among our tools. To be well rounded, you should "experience" nonprocedural languages, scripting languages, etc., not to master each one, but to understand that programming is not limited to one language, tool, or approach.

Students who start with Java and then learn lower-level languages may think of lesser languages as stupid or frustrating, whereas students who learn "going up" (which is approximately the same as learning about programming languages in a chronological order) get a better feeling for how the evolution of languages has added convenience and safety to what we do.

</soapbox>

MarkCollette
Jun 2, 2005, 06:33 PM
Yup, and it's all important to know. (Though it perhaps could use a brief explanation of what's a register, what's an opcode etc.)

Hehehe.. Yes, thanks. I typed it all out on the fly, so I hope I didn't miss to many things.

superbovine
Jun 2, 2005, 06:44 PM
I read an article yesterday about the problems of learning modern programming languages. Programming languages have evolved much of the last few decades, but are often too complicated for beginners, and don't give a good feel for what the computer is actually doing under the hood.

The writer's theory seemed to be that students would do better by first learning an old, primitive language such as Fortran or plain BASIC (not a souped up object-oriented BASIC), before progressing to the languages we rely on today. When there is too much theory and too much complexity, students can't get that first "Hello, world" to run and get off to an unnecessarily slow start.

I'm not sure I agree with that, but I do know students who don't have a good idea how computers work, and just want to get their Java program working so they can turn it in by the due date. I've always been glad that I programmed in assembly language, C, and other low-level languages before I moved up the food chain, but maybe that's just because I feel more comfortable knowing how things work.

Some people are better suited to programming than others, but anybody with the time to devote to it should be able to learn some simple programming. I think more people would do well to start with a simple scripting language (and I don't mean AppleScript, which is not as simple to use as it is often made to sound), so that less effort is required to get the computer to do a few simple tricks, without all the baggage of learning object-oriented programming and a million rules about scope and structure. That can come later.

Do you have a link for that article?

I have first hand expierence in that. I started university as an Electrical engineering major, and graduate with a computer science degree. at this university CS was apart of math not engineer so a lot of the courses were seperate. The major difference was engineering school started their 1st years in Fortran, and CS started their students in Java. I went through both system for awhile. I don't think it really matters in the long run. for example, with fortran you get a better idea of hardware because certain in fortran regarding spacing, columns, and calls like rewind involve hardware issues. Java is an OOP language which gives more thought have structure and design. Most computer science school i believe now are expecting kids to have learned the basics of programming (loops, if, while, for etc) by their freshman year changing how programming 101 is taught. i think either philosphy is fine.

Doctor Q
Jun 2, 2005, 06:55 PM
Do you have a link for that article?I said "yesterday" in that post back in February, so I don't know if I can figure out what I was reading then, but I'll take some educated guesses and see if I can find it.

superbovine
Jun 2, 2005, 06:56 PM
I said "yesterday" in that post back in February, so I don't know if I can figure out what I was reading then, but I'll take some educated guesses and see if I can find it.

oh didn't look at the date, my bad. don't trouble yourself to much.

MarkCollette
Jun 2, 2005, 07:15 PM
I have "professional disagreements" with educators who think you should start with assembly language programming and work your way up. I agree with the "up" direction, but not with the starting point.

I think it's useful to learn about assembly language programming, and the fact that computers have registers, opcodes, instruction sequences, and what RISC, CISC, pipeline, multiprocessor, interrupt, and other terms mean, but I think it is not the best use of time for university students to spend weeks hand-writing their own SPARC code, as at least one university program I know currently favors. That's like having homebuilders grow the trees instead of starting by buying lumber. It's worth understanding low-level computer principles, but assembly-level coding, even for embedded systems, is less important each passing day and is better left for experts or specialists. It shouldn't be put there as an obstacle (which it often is) for beginning programmers.


I'd like to make a distinction between several aspects of low level programming. I think it can be divided into two groups:

1. Simple basics. Eg:

Registers
Opcodes
Instruction sequences
Memory
Bits, bytes, 2's complement numerical representations

2. Advanced. Eg:

RISC, CISC
Pipeline
Multiprocessor
Interrupt


I believe that all programmers should start with the Simple basics. Some programmers in niche environments may well choose to pickup the Advanced low level stuff too.



That said, I think you appreciate and understand modern programming better when you understand what the machine actually does, what an interpreter like BASIC does, what a language like C or C++ is best (and worst for), and why languages like Java and Objective C have their current positions among our tools. To be well rounded, you should "experience" nonprocedural languages, scripting languages, etc., not to master each one, but to understand that programming is not limited to one language, tool, or approach.


Even those are all imperative languages. There are also languages from completely different paradigms, like functional languages. Apparently Python has done a good job of taking concepts from both worlds.



Students who start with Java and then learn lower-level languages may think of lesser languages as stupid or frustrating, whereas students who learn "going up" (which is approximately the same as learning about programming languages in a chronological order) get a better feeling for how the evolution of languages has added convenience and safety to what we do.


True. Although, although, as your say, it's not really chronological per se. Most programming concepts were discovered by the 1960s, and not much of anything new has happenned since the 1980s. It's just that some of these ideas have gone mainstream. For example, Lisp predates Basic and C.

Doctor Q
Jun 2, 2005, 08:12 PM
I'd like to make a distinction between several aspects of low level programming. I think it can be divided into two groups:

1. Simple basics. Eg:

Registers
Opcodes
Instruction sequences
Memory
Bits, bytes, 2's complement numerical representations

2. Advanced. Eg:

RISC, CISC
Pipeline
Multiprocessor
Interrupt


I believe that all programmers should start with the Simple basics. Some programmers in niche environments may well choose to pickup the Advanced low level stuff too.As long as it's only a survey of the meanings, the advanced concepts could be part of a single lecture. But that's a minor point. All of it would be useful for those majoring in computer science, but lots of business majors, English majors, etc. also take introductory computer science courses, and perhaps very little of this is relevant to them.

Even those are all imperative languages. There are also languages from completely different paradigms, like functional languages. Apparently Python has done a good job of taking concepts from both worlds.Good point. Perhaps Prolog (http://en.wikipedia.org/wiki/Prolog) is a good choice, because it is straightforward and simple programs can be explained, or even written, in a very small amount of time.

True. Although, although, as your say, it's not really chronological per se. Most programming concepts were discovered by the 1960s, and not much of anything new has happenned since the 1980s. It's just that some of these ideas have gone mainstream. For example, Lisp predates Basic and C.McCarthy's LISP had the amazing feature that it was extremely low level (dealing with registers) yet was a big leap forward in the development of programming languages. The phrase "lambda calculus" may scare some people away but the concept is still around in various other guises.

Only somebody familiar with LISP could explain why "caaadadadr" is a valid function in LISP despite having no hits in Google (until this post gets indexed, that is). :)

barneygumble
Jun 2, 2005, 08:44 PM
One of my University of Alberta CS professors, Alan Supynuk, said that what makes a great programmer is the ability to use both sides of the brain equally, the engineer and the artist. He explained this by asking us to imagine we are standing on the top of the CAB (Central Academic Building) (almost the center of campus, too) and looking north. On the left are mostly the scientific/engineering buildings and on the right are mostly arts buildings. This is quite analagous to how the brain works. And a great programmer is able to borrow heavily from both sides. Good programming isn't just a science, it's also an art.

P.S. He also joked at our grad party that only a programmer would read the instructions on a shampoo bottle and think, "This is an infinite loop": Lather, rinse, repeat.

That explains why C++ was my worst subject at uni, the art part of my brain does not function. I am the least creative person in the world!!!

MarkCollette
Jun 2, 2005, 09:23 PM
As long as it's only a survey of the meanings, the advanced concepts could be part of a single lecture. But that's a minor point. All of it would be useful for those majoring in computer science, but lots of business majors, English majors, etc. also take introductory computer science courses, and perhaps very little of this is relevant to them.


I was thinking of a few solutions to the problem of how to handle non-majors taking intro courses.

First off, I wouldn't change the program for the majors, to cater to the non-majors. If it has to be suboptimal for one, then it should be for the outsiders.

Next we have to decide, what is the goal? What are we trying to teach to the business majors, etc.? Is it simply how to use a computer, or how to write software? Where I went to school, there were computer science classes specifically for non-majors, which could not count towards a degree in computer science. Those classes taught how to use MS Office, and Windows, etc.

But what about science or math majors, who need to write simple mathematical programs? Then probably some courses that teach simple structured programming would be best. Maybe offered in variants for C, non-OOP C++, or Fortran.

Maybe the non-major programming courses could build up to enough OOP understanding to cover some Javascript or VBScript.

But in no way should those focussing on computer science receive this watered down approach.



Good point. Perhaps Prolog (http://en.wikipedia.org/wiki/Prolog) is a good choice, because it is straightforward and simple programs can be explained, or even written, in a very small amount of time.

McCarthy's LISP had the amazing feature that it was extremely low level (dealing with registers) yet was a big leap forward in the development of programming languages. The phrase "lambda calculus" may scare some people away but the concept is still around in various other guises.

Only somebody familiar with LISP could explain why "caaadadadr" is a valid function in LISP despite having no hits in Google (until this post gets indexed, that is). :)

I was sitting there for a few minutes, when writing my post, trying to remember a Logical language, like Prolog, as you mentionned. Had to give up. Thanks for the reminder.

I'm one of those guys who will never make assumptions about operator precedence. I just put the brackets in. If I see someone using a functional language's lack of brackets to delimit nested function calls, then I take out my pocket protector and beat them to death with it :)

darkwing
Jun 2, 2005, 09:55 PM
You are right. Some people can, most people can't. Some of the posts in this thread prove my point entirely. Anyone can learn syntax. Very few people seem able to really understand and grasp the concepts of what's going on and how to do things the most efficient way. What I've found in my professional career is that all the people who are on time with fast efficient code agree with everything I say and vice versa. :)

I wrote my first program when I was 6. I learned BASIC on an Apple II on my own as soon as someone showed me how to list and edit my own files. The simple fact is, I was fascinated with it and I saw patterns in the syntax. The knowing of what went on behind the scenes came later, but it did come.

Now, I'm a professional in the medical device industry who does a lot of hard realtime systems (everything built on my Mac, but often cross compiled to x86 linux) and when you're dealing with software where microseconds count, you have to be good. However, if you want to hobby around with it you should do ok just ask people for help where it's needed. If you have any C++ or Java questions, feel free to contact me privately and i'd be happy to spend a little time with you discussing things online.

OOP is not a syntax. It's a set of ideals. The best thing you can do if you want to learn is what you've already done. Admit you suck. The second you think you know everything, you'll stop growing. I know I have a lot of things to learn and I don't kid myself about it. I also consider myself "good" though.

Steven

Doctor Q
Jun 3, 2005, 10:52 AM
I'm one of those guys who will never make assumptions about operator precedence. I just put the brackets in.That's a good habit for nontrivial expressions. Not only does it keep you from having to remember the precedence order for whichever language you are using, but it helps someone reading your program too.

You've reminded me of a very old thread about a precedence case I tripped over.

The APL programming language (which stands for "A Programming Language") has an extremely simple but at the same time unusual precedence rule. It's sensible given that there are way too many operators (note: actually called "functions" in the language's terminology) to assign an order to. It can be a source of confusion for beginners but after a while becomes quite natural to use. Expressions of the form

value operator value operator value operator value operator value ...

are treated as follows (unless parentheses override):

value operator (value operator (value operator (value operator value ...))

The operations are performed left-to-right but grouping is right-to-left. Therefore, when you start an expression with

2 x ...

the result is guaranteed to be twice whatever the rest of the expression is, no matter what operators it uses. For example, if you know that the perimeter of a rectangle is twice something about the sides, you can write

2 x

and then figure out the formula required

2 x width + height

without having to add parentheses. If you are used to APL, it reads naturally. If you aren't, it can be misleading.

Omen88
Jun 3, 2005, 11:04 AM
I'm one of those guys who will never make assumptions about operator precedence. I just put the brackets in. If I see someone using a functional language's lack of brackets to delimit nested function calls, then I take out my pocket protector and beat them to death with it :)

Well then you probably love the prefix notation of Scheme and Lisp.

But I gotta say you're right, I use braces too for non-trivial operations.

Doctor Q
Jun 3, 2005, 01:19 PM
Do you have a link for that article?I found it! It was an old article I had come across again.

The article was named "Everything is Fortran, in its own way", by Alan Creak, and was in the April 2003 issue of ACM SIGPLAN Notices. I found the ACM web page (http://portal.acm.org/citation.cfm?id=844093) for it, where SIGPLAN members (like me) can download it. You can find other sites that mention it by Googling the article title.

whooleytoo
Jun 3, 2005, 01:26 PM
Hehehe.. Yes, thanks. I typed it all out on the fly, so I hope I didn't miss to many things.

Thank you! It was an interesting read. As someone who used to have to debug other people's code in assembly, it nearly brought a tear to my eye! (How sad am I???)

superbovine
Jun 3, 2005, 01:32 PM
I found it! It was an old article I had come across again.

The article was named "Everything is Fortran, in its own way", by Alan Creak, and was in the April 2003 issue of ACM SIGPLAN Notices. I found the ACM web page (http://portal.acm.org/citation.cfm?id=844093) for it, where SIGPLAN members (like me) can download it. You can find other sites that mention it by Googling the article title.


thanks doc :D

whooleytoo
Jun 3, 2005, 01:39 PM
While this is slightly OT, I believe the nature of software development is starting to change too. If you look at the way Apple and Microsoft are plugging the gaps in the market (mail clients, web browsers, movie/photo editing tools etc.). Hence I believe small, independent developers are going to be doing more plug-in development (internet plug-ins, widgets etc.), and customisation (say, Webkit based browsers with a specific purpose/client in mind), while Apple provides the 'services' (movie & sound playback/editing - QuickTime, Internet browsing - Webkit etc.).

This could potentially change the skill set required for up and coming developers, where scripting and design abilities might be more relevant than low-level knowledge and experience (though IMO they should always be present).

yellow
Jun 3, 2005, 01:42 PM
5300cs, I'm with you. I cannot seem to learn programming from a book. I always seem to get to a point and then get stuck. Never tried it in a classroom setting. And I'm not a dunce...

jazzmfk
Jun 3, 2005, 02:01 PM
I wish man. 8 years of piano, and 6 years of percussion/drums. 5 years of all-county/all-state band.

...Didn't help one bit in my programming -_-.



I've heard it said that back in the "early days", tech people actually recruited music majors because of the similarities between composition and programming. Evidently it isn't the years spent in performance, but the analysis, study of form and structure, and the combination left brain/right brain that are utilized both in composition and in programming.

In grad school back in the early 90's, we learned Turbo Pascal and C++, and some other object-oriented thing that was developed by our prof at columbia. I really liked it, but I didn't feel my music background helped as much as the simple fact that it felt like I was solving a puzzle. It worked something like this:
visualize what you want to do
try it
get annoyed when it doesn't work
revise it to make it work
visualize the next step - but think deeper to avoid wasting time
try it
- vamp 'til completion -
go celebrate!

Kinda like playing with a Rubik's cube but without the satisfaction one gets by chucking it across the room in frustration....that gets expensive with your computer.

MFK

MarkCollette
Jun 3, 2005, 08:19 PM
That's a good habit for nontrivial expressions. Not only does it keep you from having to remember the precedence order for whichever language you are using, but it helps someone reading your program too.

You've reminded me of a very old thread about a precedence case I tripped over.

The APL programming language (which stands for "A Programming Language") has an extremely simple but at the same time unusual precedence rule. It's sensible given that there are way too many operators (note: actually called "functions" in the language's terminology) to assign an order to. It can be a source of confusion for beginners but after a while becomes quite natural to use. Expressions of the form

value operator value operator value operator value operator value ...

are treated as follows (unless parentheses override):

value operator (value operator (value operator (value operator value ...))

The operations are performed left-to-right but grouping is right-to-left. Therefore, when you start an expression with

2 x ...

the result is guaranteed to be twice whatever the rest of the expression is, no matter what operators it uses. For example, if you know that the perimeter of a rectangle is twice something about the sides, you can write

2 x

and then figure out the formula required

2 x width + height

without having to add parentheses. If you are used to APL, it reads naturally. If you aren't, it can be misleading.

I think that's called "right associative". Luckily most languages now-a-days just follow math rules, otherwise I'd go crazy.

zimv20
Feb 27, 2006, 07:47 PM
yes, i'm reviving an old thread, but i only just read through it. lots of stuff i agree, lots i don't, but this post really captures it:

First, the question of whether programming is for you:

- Do you look at the world around you with curiosity?
- Do you think about how every large thing is composed of smaller and smaller parts?
- Can you plan something out, methodically, step by step?
- Can you take each of those steps, that anyone would take for granted as being completely obvious, and break them up into even smaller steps, so that a complete and utter idiot (computer) could get it done?
- Can you take multiple competing criteria, and find a solution that meets all needs?
- Can you compromise?
- Would you be comfortable describing yourself as a professional problem solver?
- Can you think analytically, scientifically, and logically?
- Do you want to spend the rest of your life learning new things?
- Can you, given a good book or website, teach yourself?
- Do you want to create?
i often see people confuse "learning to progam" with "learning a programming language". though related, they're not the same, just as learning to speak is not the same as learning a language.

i've got a computer science degree and years of professional experience. here are some traits i've seen in good* developers:

1. the ability to abstract
2. the ability to simultaneously consider multiple levels of detail
3. the ability to context switch
4. an obsessive attention to detail
5. a healthy dose of irreverance
6. a desire to go back and improve what's already working

* meaning roughly 1 in every few hundred i come across

these are things which pretty much can't be taught, only improved upon. imo, good programmers are born, not taught.

Fender2112
Feb 27, 2006, 08:58 PM
Motivation is the key in programming. Motivation, patience, and logic. All the rest is just syntax.

Well put. :D

caveman_uk
Feb 28, 2006, 03:04 AM
...
I've been trying to learn programming for a long, long time. The problem is that I just don't get it (I suck at it.) I've tried Perl, Java and C++ and find them extremely complicated.
...


I am currently working under Windows, Linux, Mac Os X, Pocket PC using C, C++, C# and Java. I also had been developing for 5 years with Turbo Pascal (from 4.0 to 8.0)...

I used a simple method to learn a language:

1) identify a small initial application, which covers various "problems", like user interface, database or data archiving. A simple addreess book could be a quite good example.

2) Focus on a language initially. C is quite hard for someone which is not used to "pointers". I guess Java could be an easy language, since it is well documented and there is a GREAT LOAD OF SAMPLES and forums around the web.
I also suggest you to use Eclipse as IDE. It's fast and free.

3) Go to a bookstore with a good computer science section. Look at a good book with contents about your current objective. A book with MANY pages is not always a BIG book... Choose carefully.

4) Now you have a basic guide to follow. Read it and begin to build your "wanted" application. Try to break the application into "small" applications/functions (like saving a text file, opening a window, etc) and solve them in a separated way. Then put together all these small results to obtain your big final result. This is called "Divide Et Impera".

Your first application usually looks like an "experimental" app... but you will also be satisfied.

I found this the best way to pick up Objective-C/Cocoa. You can read as much as you want but you'll learn so much just doing a small application (not too trivial though - think address book not temperature converter ;) ).

Cue
Feb 28, 2006, 07:46 AM
yes, i'm reviving an old thread, but i only just read through it. lots of stuff i agree, lots i don't, but this post really captures it:


Good thing you did! I was sucked into it right until I reached your reply and noticed the date!

Someone commented on whether CS is considered to be Science or Art. I was once asked the same question on an interview when looking for a placement!

Since there is already a lot of input in this thread I'll just say this.

Programming is like painting.
Anyone can paint, not everyone is a painter.

darkwing
Feb 28, 2006, 07:58 AM
edit: i'm not going on the forum before 6 am anymore..i just typed all this up on a thread that's over a year old. *sigh*

I think some people can, and some people can't. When I was 6 years old, someone showed me on an Apple II how to do:

10 ? "hello"

From there, I looked at other files and after about 2 weeks wrote my first game. It was a series of illogical yes/no questions, but it was a game nonetheless. :P Ever since then I knew what I wanted to do..write software! And as a software engineer now who is 1 quarter and 2 weeks from a masters degree in computer science, I guess that's what I've become. I wrote my first shareware app at age 14 (datasnd, a program to convert VOC/WAV files to system 7 double clickable sounds..anyone remember that? only three of you jerks regged it) and I was doing odd jobs for schools or businesses since age 12.

One thing I have learned is that anyone can learn a syntax, but not everyone can learn the concepts. This even applied to me at one time. I've gone from "let's see if this will work" to knowing before I type a single line of code if something will work, in most cases. (This isn't the case for some lab related algorithms, where say I'm trying to control the temperature 5 cm away from an RF electrode immersed in jello, or something. That requires testing and tweaking.)

While some people are more "natural" at it than others, there's always the matter of practice makes perfect. If it's something you truly love and are passionate about, you'll figure it out eventually. However, I work with a lot of so-called PhDs who can't even understand OOP. (Let alone simple operations.) The industry is full of those who say they can, but can't. I've only worked with one programmer I consder very good, and it was this guy who came here right out of UC Berkeley and was rather bad, until he worked with me for about a year and took the approach that "wow maybe I can learn something." That was always my biggest problem growing up...thinking I knew everything. :)

If only I could work with people better than me, I would become even better.

You have a good resource...the forum! There seem to be a lot of competent programmer types here. Ask away.:)

macdong
Mar 4, 2006, 03:35 PM
I think one of the major hurdle that programmer faces is the lack of preparation works before "attacking the code". You've got to spend time doing Organigram and Flow chart. Work on your logic on paper. Visualize your program. You can even write speudo-code before "Coding".

For some, the preparation phase is all in their heads : It's a given talents. For others, thoses previous steps are necessary for making it.

(BTW, I've also starting to learn japanese, not that hard when you put your mind into it.)

i think you are getting a bit too far down the way :)

ChrisA
Mar 4, 2006, 09:38 PM
I've been trying to learn programming for a long, long time. The problem is that I just don't get it (I suck at it.) I've tried Perl, Java and C++ and find them extremely complicated.


Here is the problem: There is a difference between programming and learning Perl or C++

Just like with natural languages. Learning to write is not like learning German. Writing is organizing your presentation in a logical order and adding facts to make a point or writing is making a story that people will want to read. Learning German is just rembering which of der, dos and so on to use and when plus a mess of vocabulary.

So it is the same with programming. To write a progam you must fist have a very clear understanding of what it is to do. You write it down (in English) and draw pictures and show it to the client and say "this is what I'm going to build. It this what you want?" finaly you agree. Next you think of all the parts and how they relate and interact and the functions that the parts have and the type of data that get passed around. Once you have this worked out you can think about C++ or Perl.

When it gets to wrinting code, there is no why around it. You just have to kow tons of trivia, mostly about the environment the code will run in. The Window system, the OS the libraries you will use. But this is easy if you already know you want to (say) display a warnnng in a dialog box you can hunt down an example of doing that. the hard part is working out when these warning need to go up

Mostly when peole fail it's becaue they don't know in detail what it is they are settig out to build and what parts they will useto build it.

The way to learn is start small with a very well defind project like writting a program that wil print the words "Hello World" and then terminate. then modify it to say ask for your name then say "Hello <yournamehere>".

The programming language does not matter. Whatever you lern will go out of style and they will invent new ones. Te trick is to learn to program and you will just "suck up" the languge in the process, lke you learn natural langue by just trying to communicate and you pick up vacabulary and grammer in the process.

paddy
Mar 5, 2006, 10:55 AM
I'm in the process of deciding which course to do for college. I am in secondary (High) school and I am considering computer science. What I need to know is, how important is Higher level maths, or how important is it to have a good understanding of maths?

If its any help in our aptitude tests I scored highly in the mechanical and language tests, but poorly in the math tests.

superbovine
Mar 6, 2006, 07:08 PM
I'm in the process of deciding which course to do for college. I am in secondary (High) school and I am considering computer science. What I need to know is, how important is Higher level maths, or how important is it to have a good understanding of maths?

If its any help in our aptitude tests I scored highly in the mechanical and language tests, but poorly in the math tests.

Computer Science is defined as the application of math, hence higher level math is pretty important. Calculus, stat, linear algebra, discrete math, logic, diff equations (maybe) are all required to get a CS degree.

Having a good math background will help you express problems programmatically in the most efficient way, or just plain solving a problem might require you to bust out some math. For example, rotating a cube 90 degree in 3 space. How about if someone asked you to write part of a program that has to produce statistic on data points? What about calculating the most efficient way to sort a set a data?

Chacala_Nayarit
Mar 6, 2006, 09:45 PM
Haha object-oriented. Everytime I hear that word it makes me cringe. Like listening to my Java prof droning on and on, while everyone nods.

Then when you ask a question, he denounces you publically in front of the whole class. In a word: Weeder course. I don't know how I did it, but I pulled an A- in that class, but I will forever hate programming for the kinda ***** I had to go through. Not fun.

Side note:

I take classes, like Java, online. No reason to put up with arogant ****wits. ;)

whooleytoo
Mar 6, 2006, 09:53 PM
Having a good math background will help you express problems programmatically in the most efficient way, or just plain solving a problem might require you to bust out some math. For example, rotating a cube 90 degree in 3 space. How about if someone asked you to write part of a program that has to produce statistic on data points? What about calculating the most efficient way to sort a set a data?


Obviously, English skills are also important.. ;)

(jus' kiddin'!)