Is Programming and Software Engineering more of a mathematical or language based activity?

In school, it’s a fairly common for a person to be better with languages and verbal subjects on one hand and mathematically based subjects on the other. It seems to be that programming lies somewhere in between these two broadly defined subjects.

Would you say that programming is more of a mathematical or a verbal skill, and do you think it falls into either category more or less unambiguously (i.e. it’s pretty much applied mathematics)?

Also, are really great programmers usually equally gifted in both the mathematical and verbal domains?

I think this is more of an IMHO question, but I think programming itself is almost squarely in the mathematics side. Even the “language” bit can be reduced rather boringly to mathematical concepts like Context Free Grammars.

THAT SAID, to be a truly good programmer, you often need language skills. This is because most programming is done in teams, and it’s very important to be able to communicate what you’re doing and what needs to be done in a good manner. It’s this skill that tends to separate “good” programmers from “great” programmers.

There’s also some important stuff that’s not really math or language, like systems design. I’m not sure that fits in anywhere, but a person who can design a good system or interface has a very useful, and often rare skill.

Absolutely maths. For example, in many places computer science degrees are part of the mathematics or science departments.

Then again Knuth considers good programming to be in essence poetry. He knows something about what he talks :slight_smile:

Much more mathematical. One of the reasons I have a senior engineering position is because I happen to be good at both the logical side of programming, AND in communication. I constantly seem to be in meetings where people don’t understand what other people are saying, and don’t even realize it. I have to step in a clarify things…a lot. This was true at my last company, too.

ETA: Just read some documentation written by a programmer, and compare it to documentation written by a tech writer. It’s very different.

-D/a

Language. The math is pretty simple (although there are lots of math related things one can do that are difficult). The act of explaining things very clearly and concisely, in a language made up to be clear, concise, and unambiguous. Okay, excepting when one does something like foo[i++] = i++, which is admittedly ambiguous

Unless you are working on mathematically intensive applications, then most of mathematics is nearly useless in computer programming or engineering. Computer programming requires a knowledge of elementary logic and the ability to count up to one. Verbal skills, specific technical knowledge, and general knowledge of practices and techinques are far more important than mathematics for at least 90% of the field. For the most mathematically intensive applications, mathermaticians themselves become the programmers, because it requires that level of specialized knowledge, and conventional software engineers can deal with the intergration into the non-math intensive part of those applications.

I would prefer to hire a math major who has never seen a computer over a grammar specialist for coding.

I’m with TriPolar - it depends on the task, but generally speaking high-level mathematical knowledge is not essential. Of the many people I work with who write code, I doubt more than 10% of them regularly work with mathematical concepts beyond a high school level.

A more specific question is required for a better answer. “Programmer” and “Software engineer” are ambiguous terms.

Mostly logic, which is closer to math than to language. Programming languages are really nothing like human languages, so for example, being fluent in French and Italian won’t help you learn Java.

Manduck’s post represents my initial thoughts upon reading the thread title. I programmed for over 40 years and never once got involved in any higher-level math including algebra which I never took in high school. The ability to look at a problem logically and solve it is much more important. Note that Computer Science classes stress mathematics, IMHO, primarily because the degree is part of the Mathematics department and not because it is required for most programming tasks. Programming tasks like compilers and programming language development or statistical analysis, of course, require higher-level math, but not most business problems one encounters.

Bob

Computer science stresses mathematics because it IS mathematics. Programming is not computer science (however, computer scientists need to be able to program). Computer science deals with more abstract topics like algorithmic efficiency and formal grammars. Think of computer scientists as the people who create the languages, not (generally) the people who use them.

Algorithmic efficiency is important even for us peon programmers. Naive implementations usually have unacceptable performance characteristics for all but the most trivial problems. Just because that’s “computer science, not programming” doesn’t make it optional for programmers.

As for higher-level math, I guess I’m coming from the opposite background of urban1a, because I use some things like set theory, graph theory, and discrete math all the time. I used integral calculus to solve one problem I was given, linear algebra sometimes is handy, and just-plain-algebra is so fundamental that I can’t imagine a programmer being even remotely effective without it. Computer Science may encompass a whole bunch more than programming, but it’s sure as hell useful for programming.

Bad phrasing on my part in the previous post. I just meant not to confuse programming with the entirety of computer science in the same way that one shouldn’t confuse calculus with the entirety of mathematics.

This.

Typically programming itself is done best by people who are able to think about problems and decompose and solve them in a very methodical and logical way. Good programming is as much about concepts as it is about details; you can be the best detail-oriented coder in the world, but unless you’re able to understand what you’re trying to do in the larger picture, you won’t be able to tie those well done details together into anything coherent or particularly useful.

It’s not math; you may never actually do any serious math in a programming career, depending on what you’re working on.

That logical and methodical problem solving is what will stand you in good stead as a programmer though.

I’d like to believe that language skills are more important, but in teaching computer programming, I find that it’s really hard not to use math in order to explain programming concepts.

A big part of it is that it’s easier to use numbers than use words - it’s easier to add numbers together than to parse and concatenate strings. Using the C language, it was really hard to use strings, and because that was often the first language taught decades ago, and that how many computer science professors learned, they stick with teaching using numbers. Now Java or Python or PHP makes using strings easier, so perhaps it will change.

I agree with Manduck that logic is probably more important and hard to recognize as a skill in students. It’s like the question on if Algebra is important to know (see Is Algebra Necessary?. For programming, discrete math is probably more important.

I’d like to believe that language skills are more important, but in teaching computer programming, I find that it’s really hard not to use math in order to explain programming concepts.

A big part of it is that it’s easier to use numbers than use words - it’s easier to add numbers together than to parse and concatenate strings. Using the C language, it was really hard to use strings, and because that was often the first language taught decades ago, and that’s what many computer science professors learned, they stick with teaching using numbers. Now Java or Python or PHP makes using strings easier, so perhaps it will change.

I agree with Manduck that logic is probably more important and hard to recognize as a skill in students. It’s like the question on if Algebra is important to know (see Is Algebra Necessary?. For programming, discrete math is probably more important.

To answer the OP, really great programmers (like me!) are great in both verbal and mathematical skills.

It’s not math. It’s not language. A good programmer’s main weapon is the ability to see some kind of concept/project in a macro way in your head, in a very detailed and complete manner, to be able to drill down to the tiny portions of it, again in your head, without losing sight of the whole thing, and, lastly, to be able to express those portions in the grammar of the chosen computer language. And do that for months at a time (or however long your project lasts).

I have met a lot of Orthodox Jews who were very good programmers. I think the yeshiva training where you’re supposed to learn huge tracts of the Torah, but be able to quote tiny portions of it at a moment’s notice in order to find a relevant answer to a question prepares them really well for computer programming.

I don`t know how old you are supery00n, so I apologize if this is patronizing, but you mentioned school and are asking for advice about careers so I’ll assume you’re fairly young.

The short answer is Math, but the longer answer is that the Math vs. Verbal dichotomy isn’t as important as you’re making it out, or at all really. Like Manduck and bump and Terr said, it’s logic and being able to break down a problem and conceptualize problems in your head easily.

You certainly don’t need high level mathematical knowledge, but an aptitude for math is a better base for thinking logically and breaking down abstract problems. Overall it’s not that important of a distinction.

Grammar/verbal is pretty unimportant. However, since human interaction with computer code involves overwhelmingly more reading than writing, some verbal aptitude is helpful. For any program with any significant non-theoretical component, I don’t want to inherit it from a pure math/algorithm guy, I’d much rather inherit it from a more verbal guy. The former may be tighter code, but the latter code tells me what it’s trying to do.

Programming is about abstraction and modeling, choosing which patterns should be applied into code to model reality in the most economical way. And, afterwards, lots of troubleshooting.

Logic plays a great part, but so does inductive reasoning. Few people are very good right away, it usually takes some practice.

For people with more social skills, there are aspects related to systems architecture and analysis that involve dealing with users or customers.

So, on the math[s] side, algebra is important because of the reasoning. For those who get there, integral calculus is relevant for the same reasons.

On the language side, it’s the deconstruction and analysis parts that count. And maybe actual writing, for the notion of applying patterns to build something.

Practical courses that involve some tinkering (wiring a light bulb, etc.) would also have some relevance, in that someone who doesn’t like troubleshooting and getting stopped by tiny details will not enjoy programming.