This conversation is closed.

Do you think programming and logic should be made part of basic courses along with math and art?

How could these be implemented at various education levels?
I think these are getting more and more important and these days it is good to have at least a basic grasp of these. Plus they help foster logic, creativity and problem-solving, which we seem to need more and more of.

  • Mar 25 2011: Many business people would be better off if they were proficient in languages such as Visual Basic because that would give them the ability to develop sophisticated Excel and Acces macros, two tools that are widely used. Learning VBA is much simpler if you have been taught the basics of object-oriented programming and understand the terminology. And moving from, say, VBScript to JavaScript is a simple step, so the basic knowledge would be portable to applications for websites and other media. All of which is to say that I would favour teaching schoolkids programming fundamentals, even if only as an option. Apart from anything else, it is interesting and certainly enhances one's ability to think logically.

    But as with so many things, there could be unintended consequences. Example: I have been a programmer since 1964. I learned machine language and then ugly disasters like COBOL. As I progressed through my career, I did less programming and more design. One day, when I wanted to do some hands-on coding for the first time that was object-based, I realized I would have to unlearn everything I ever knew about sequential programming and, in addition, try to figure out what on earth dot-NET was all about. I was actually worse off than if I had never programmed at all in the previous 25 years. If we decide to teach the kids the fundamentals of object-based programming, and if the programming paradigm should suddenly change again, we may not have done them any favours!
    • thumb
      Mar 25 2011: Agree about the unintended consequences. That was sort of my point earlier about App Inventor and the like not being a learning tool.

      Since all programming languages are based on Assembly abstraction, and Assembly has (pseudo sort of) loops, conditions and values, that's the stuff that should be emphasized, with the rest (data types, arrays, objects, events, etc.) being taught with a warning sign on. The only way for THAT to change is if the way computers work changes, but at that point, we aren't really dealing with computers.

      Not exactly buying the business people thing though (and I'm just being a devil's advocate here; you know, just in case someone decides to put this as an argument to their government officials)... all citizens would also be better off if they knew the laws of their country in details, and yet we still hire lawyers, even if we know for a fact that something is illegal, and I'm guessing we still would, even if he knew the basics surrounding our government's laws.
    • Mar 25 2011: I see what you mean. But I am sure there were some useful applications that were invented while you used COBOL, and that you probably wrote some of them. It must have been hard to unlearn years of practice, but I am sure both learning COBOL and learning object-oriented programming were necessary steps, right?

      We used carriages, then we had to learn to use cars. As long as we continue to develop, we are probably always have that problem.

      I am just wondering. Was the logic completely different though? I mean the logic behind the programs. I am completely unfamiliar with COBOL. I just heard about it, but know nothing of how it worked.
      • thumb
        Mar 25 2011: Everything about COBOL outside of the core concepts I mentioned is vastly different in it than from more recent languages.

        Many modern languages come with pre-built functions that make commonly complex stuff easier by putting it in a single "function" you can "call" (e.g. writing out data on the screen is actually very difficult if you do it in machine code or Assembly). COBOL comes with financially specialized functions, which is how businesses were once persuaded into buying programs written in COBOL. However, it has few other functions (or at least it did once), and it's syntax (i.e. the way you write it), as well as its organization (data types, function features, etc.) have little to do with what most other languages use.

        I don't know COBOL, mostly because I just look at code samples and go "What on earth is this about?". I know a few more modern languages, a.k.a. "C like" languages, as well as a few languages from other paradigms (SQL, Lisp, Prolog, XSLT) but the reason I do is because it's the exact same thing written differently... COBOL... not so much.
      • Mar 25 2011: For many years all programs were totally sequential: do this, then do this, then do this, then, if this condition applies do this and if not do that, and now loop back and do the whole thing again. Etc. This was the way programs were written in assembler language, COBOL, Fortran, and the like. The switch to object-oriented logic was a complete paradigm shift. Now, everything is encapsulated within "objects". A window, for example, is an object. It has various characteristics: size, shape, position, background colour, and so on. And there are a defined number of things you can do to it: open it, close it, minimize it, drag it, etc. The program code to do anything within that window is kind of embedded in the window (not strictly true, but the easiest way to imagine it). So that code lies dormant until an actual "instance" of the window is created. Then when the user does something to or with the window, the specific code for that action is executed. There is still an element of sequence within each specific bit of code, but viewed as a complete system the whole thing has no sequence but is event driven. And as Vasil says, there are typically hundreds of predefined functions built into modern programming languages that can be invoked on demand. Microsoft's .NET is a protocol which builds those functions into the whole Microsoft computing environment and so makes them available regardless of what language you are using. They have also predefined many aspects of common objects; hence, for example, their Document Object Model, which defines many characteristics of anything that might be regarded as a document. I am sure the Apple environment is the same, but I have never programmed for it so I can't say where it is similar and where it differs.

        The other major difference is that data is now managed separately from the code and is accessed using tools such as SQL, whereas COBOL, for example, embedded data management within the program.

        God, I feel old...
  • thumb
    Mar 24 2011: Where I live, in schools, programming isn't even taught as a non-mandatory course, and AFAIK, that's also the case in most places around the world (certain private schools excluded)... I'd like to see AT LEAST that, and even that isn't a fact. I mean, surely, we can debate whether it should be a mandatory subject, but if it's a voluntary course, it can't be a bad thing, right?

    As for making it mandatory... if Conrad Wolfram's idea* of using computers for the calculations and focusing on the what and why instead is implemented, there will be time, and a reason, to THEN push the envelope on programming. Until then, programming is likely to make just as much sense to people as math does today.

    I mean, yes, you can use programming to do more than math, with different (typically non math related) interests being the driver for students, but the applications are so vast that the only way to illustrate the basics in a way that will make sense to everyone is to try simplifying a subject that's already tedious and boring without programs being there... like math.

    • Mar 25 2011: You make some really good points. I think it depends though. I agree that teaching the basics of programming with java, or eclipse or even python would be too hard to do and would probably not work out any better than math.
      My major has nothing to do with programming. I study Biology. And I tried to learn some of those programming languages, but it was too tedious, hard and time-consuming. It is the kind of thing that you have to spend a lot of time on.
      But lately I have been playing around with appinventor for android. It is much more limited than other mentioned languages but it allows you to develop little apps for the android platform and is even fun. If more languages like this could be developed, then they would probably be much easier to integrate. I am not talking about studying the theory behind programming either though. At least not separately from applications. That would cause the same problems we have with math and would just be boring.

      Btw I also come from a developing country and understand what you mean when you say those classes do not even exist. I only hope that with time, we will be able to get more computers to work on.The only problem is that we lack even the electricity to operate these computers. The big problem for us would probably be getting stable supplies of electricity. But that is another problem altogether.
      • thumb
        Mar 25 2011: Like all similar applications, App Inventor isn't really meant for learning, and if that's all you know, I must tell you that you haven't yet learned the basics of programming.

        You've instead learning the basic flow of graphical applications (the ones with buttons and everything), i.e. you've learned that you have a graphical interface, and that you assign certain stuff to be happening when the user does something with this interface (e.g. clicks on a button). But the "certain stuff" is actually really limited in App Inventor and similar applications, whereas the basics of programming revolve around how those "certain things" come to be. Conditions, loops, values and the generic concept of "input" and "output"... that's the basics of programming. Everything else is abstraction for the sake of easier management.

        Programming in any language directly, with a specialized editor, similarly to Java with Eclipse or C++ with Visual Studio, doesn't have to be tedious, hard and time consuming, but like math, it depends heavily on the presence of a good teacher.

        In high school, I was thought some Pascal (it was only for about a month without any exams afterwards; command line applications only; I was part of the exceptions), but it didn't make any sense, because the only thing the teacher would do is repeat what she said when I had a question
        - Me: What's the idea of this array thing?
        - She: An array stores single typed values.
        - Me: But what's the point? We must still write out all values, so why not use a bunch of variables instead?
        - She: An array stores single typed values.

        Yeah... that was definitely not helpful... it was years later that I learned what's the big idea (simplified processing of related data) by learning other languages, but until that point, I was like "Pascal is stupid!", whereas nowadays I think "Pascal is needlessly complicated and verbose, but is just as powerful as any language".
        • Mar 25 2011: You are the professional and I get what you say. But does the general public really need to know how those certain things come to be? I think a general idea should revolve around simple problems and how those simple problems could be resolved through programming. If you can get kids interested enough in the subject, when they see that they can do wonderful things with programming, not all, but at least a lot of these students will wonder what else they can do. And then they can branch out overtime and learn more.

          It would be sort of like a gateway drug you know? I tried learning by myself when I was much younger and little programs that said hello world( I know in this case, program is a very strong word), did other simple stuff and tried to make me do more math outside the classroom were simply not enough to keep my attention you know. I knew that if I stuck to it, I could do some really cool stuff, but being much younger, I thought the process would take way too long. So I gave up. I wanted things fast because I needed to see something concrete and solid enough to keep me going. We have different brains and while some people would be satisfied building one kind of program, others would probably hate that same program( I ope that made sense). I think for kids, you would need to show some fast results to get them interested. Then when they are, you can make things incrementally harder. When they ask about something that cannot be done with the basic program, then you can point them to what they need.

          I had a teacher try to explain the basics of programming to me too once. But he was not able to convey the ideas to us clearly either. You're definitely right. Better teachers are also needed.
      • thumb
        Mar 25 2011: You have a good point about the instant gratification thing. It's typically what keeps people away from anything, and there's a need for a balance to what is appropriate and what would be interesting.

        Since I've never been introduced to how biology develops (that's not the same as "biology" as "a set of facts" that students learn; I'm talking about how biology goes on to classifying species and learning about DNA and other stuff), I've always thought of it as this complicated process (and I'm guessing you can tell me that indeed it is, until you learn it?), and have to this day not bothered into learning about it in detail.

        But I think there's an easier way to make instant gratification than using what some programmers refer to as "lego programming" (which is in essence what App Inventor and the like are). Namely, one could prompt the students to think about what mind activity they find tedious to do, and prompt them to describe how they would go about doing it. The process of programming is just the description of the process (a.k.a. writing down the algorithm). Instant gratifications comes once they see the machine do something they'd find tedious in just a second (or a few seconds...), which would happen shortly after they describe the process (assuming the teacher is good).

        Math currently holds the cup for a tedious thing, but if a student finds something else tedious (e.g. counting the words in their literature essay, finding out what day of the week a certain date is, counting the number of "CTG" occurrences in a DNA sequence, finding out whether they're a match for this guy/girl they like based on a horoscope, etc.), then that could be taught too.
  • thumb
    Mar 24 2011: Personally I think programming would be more useful than teaching algebra (but would also help students develop algebraic reasoning). Except for a very small percentage of people, no one uses algebra in their real life. By comparison, the percentage of people who use programming to solve real problems is significantly higher. However most of these people tend to be geeks & gamers as programming hasn't yet become a mainstream skill.
    • Mar 24 2011: I think so too. But with tools like app inventor from google to make programming easier, it would be possible to teach students the basics. It would help their problem-solving skills, help them think better even if they never become programming gurus
  • Mar 24 2011: I absolutely do. Programming is an excellent way to develop problem solving, organizational, and planning skills. Logic is always an excellent supplement to math because it can be very similar, but encourages abstract thinking.
    • Mar 24 2011: I think so too.I just recently tried to get into basic programming with simple applications and I see how it could help develop better, clearer thinking and planning skills. Getting kids exposed to these at a younger age could do wonders.
      I think it might even have the same effect as learning a second language and should definitely help us grasp abstract concepts much more easily.
  • Mar 23 2011: Logic is as fundamental as Mathematics. It's used on a daily basis. In grade school, I know I was exposed to basic logic, but with a tendency toward the sciences and a strong curiosity I'm not sure if I was exposed deliberately by the schooling or if it was something I stumbled into on my own. I do believe logic should be taught throughout grade school.

    Programming is also fairly important in many job fields today, perhaps almost as important as math. Many people leave grade school wondering why they were taught algebra and geometry, etc. I think a similar feeling would exist if programming were mandatory in grade school. Many people will never really need programming in their day to day lives, just like algebra. But learning the core concepts behind those subjects changes how we think and how we relate.

    Personally, I feel that there is room for many more subjects in our K-12 class rooms. From programming, logic and philosophy to day to day skills, such as money management, home economics and home/auto maintenance. Exposing young people to a vast array of subjects is not only a great way to help them choose a career, but it also enriches their lives and helps make them better citizens.
    • Mar 24 2011: I was thinking basic programming skills. They might ask themselves what they need it for but I think they would find it much more practical uses for programming.
  • Mar 23 2011: they shouldn't be fundamental because math and art are fundamental conceptaully (how do we relate to numbers and creativity) and programming and logic are application based (what do we do with this understanding)
    • Mar 24 2011: I think we need to teach more applied subjects though. Plus programming has a of artistic and mathematical concepts embedded. It would all depend on projects and what students are interested in. All depends on the way it is thought and absorbed.