Programming: some people can, some people can't?

Discussion in 'Mac Programming' started by 5300cs, Feb 16, 2005.

  1. macrumors 68000

    5300cs

    Joined:
    Nov 24, 2002
    Location:
    japan
    #1
    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.)
     
  2. macrumors 68000

    Mav451

    Joined:
    Jul 1, 2003
    Location:
    Maryland
    #2
    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.
     
  3. macrumors 68020

    Joined:
    Mar 30, 2004
    #3
    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.
     
  4. Moderator emeritus

    Joined:
    Jun 25, 2002
    Location:
    Gone but not forgotten.
    #4
    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.
     
  5. Administrator

    Doctor Q

    Staff Member

    Joined:
    Sep 19, 2002
    Location:
    Kepler-452b
    #5
    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.
     
  6. macrumors 68000

    Mav451

    Joined:
    Jul 1, 2003
    Location:
    Maryland
    #6
    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 sh*t I had to go through. Not fun.
     
  7. Moderator

    dejo

    Staff Member

    Joined:
    Sep 2, 2004
    Location:
    The Centennial State
    #7
    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.
     
  8. macrumors 68000

    savar

    Joined:
    Jun 6, 2003
    Location:
    District of Columbia
    #8
    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.
     
  9. macrumors 65816

    devman

    Joined:
    Apr 19, 2004
    Location:
    AU
    #9
    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)
     
  10. macrumors 68000

    Veldek

    Joined:
    Mar 29, 2003
    Location:
    Germany
    #10
    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.
     
  11. macrumors newbie

    Joined:
    Feb 16, 2005
    #11
    ...
    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.
     
  12. macrumors 6502a

    Joined:
    Jan 27, 2005
    #12
    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.)
     
  13. macrumors member

    Joined:
    Jul 20, 2004
    Location:
    London, UK
    #13
    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
     
  14. macrumors member

    Joined:
    Jan 6, 2004
    #14
    "Alpha" behaviour

    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. :)
     
  15. macrumors 68020

    Joined:
    Jul 4, 2002
    Location:
    Muncie, Indiana
    #15
    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.
     
  16. macrumors regular

    Omen88

    Joined:
    Jan 8, 2002
    Location:
    Flanders (Belgium)
    #16
    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.
     
  17. macrumors regular

    Joined:
    Jan 26, 2004
    Location:
    UK
    #17
    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!
     
  18. Retired

    jefhatfield

    Joined:
    Jul 9, 2000
    #18
    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
     
  19. Retired

    jefhatfield

    Joined:
    Jul 9, 2000
    #19
    it could be the method of the teacher

    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
     
  20. macrumors 68020

    Joined:
    Aug 9, 2000
    Location:
    54140
    #20
    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. :)
     
  21. Retired

    jefhatfield

    Joined:
    Jul 9, 2000
    #21
    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
     
  22. jsw
    Moderator emeritus

    jsw

    Joined:
    Mar 16, 2004
    Location:
    Andover, MA
    #22
    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.
     
  23. jsw
    Moderator emeritus

    jsw

    Joined:
    Mar 16, 2004
    Location:
    Andover, MA
    #23
    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!
     
  24. macrumors 68020

    DavidLeblond

    Joined:
    Jan 6, 2004
    Location:
    Raleigh, NC
    #24
    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.
     
  25. macrumors 6502a

    snkTab

    Joined:
    Nov 13, 2004
    Location:
    Cincinnati, OH
    #25
    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.
     

Share This Page