Poor Math Vs Great Desire

Hi everyone, my name is Darren I just joined and want to take on programming more seriously BUT…
I know it is essential to have strong math knowledge to be a good programmer regardless of language, but is it possible to still learn a language like C++ if one has less than prime math skills but a burning desire to learn? I would love to be able to program in C# but I am hesitant given that my math may limit me quite rapidly. I do have the desire to learn but can math, logic and a language all be learned at the same time?

I mean I am not that bad but some of the code solutions searched for VBA where I started learning to program MS Access are intimidating based on the logic and structure of the code but that is what drives me to want to understand it. I am just looking for encouragement to introduce myself to the group and to read the opinions of professionals and those far more experienced than me.

Thanks for reading and for your insight!!

No… not really. Do not let fear of math stop you from programming.

Computer science can be taught as a sub discipline of mathematics, but that’s more an historical curiosity. Earliest CS pioneers were mathematician and engineers (Knuth, you rotter) but that’s not really what programming is about.

Programming is very basic logic, not the abstract symbolic logic that gets math geeks excited. You’ll find math used to analyze algorithms, but not to implement them (i.e. programming.)

You need math in programming if you’re solving a math problem. Graphics engines use a lot of math. However, a well written engine can be used with zero knowledge of all the math that went into it.

I suck at math. Well, the higher stuff, at least. Happily, as a professional programmer for decades, it’s not a problem. In fact, math and engineering types often seem challenged by programming. I once had the rather surreal experience of tutoring my calculus professor in programming. I’ve known many excellent engineers who couldn’t program to save themselves.

2 Likes

baavgai Thank you for your encouraging answer I do appreciate the time you spent writing it. I have noodled about with programming for years from Pascal to VB/VBA but only know small snippets of things I want to learn C++ because Operating Systems seem to appeal to me more than other aspects even though it’s not very likely I will be passing any interviews anytime soon… I am just at a point where I want to learn with no destination so I have the experience of figuring out what I want to do…I figured to learn a fair bit first not running before I can crawl using LeetCode to test and identify milestones of knowledge. In your opinion and outside of syntax, what are the most challenging concepts to learn from the novice level? I have done Hello World! lol…so far but am thinking of creating a Realty Transfer Fee Calculator for a first little project prob in C#. At my level, I don’t think I need to worry about memory allocation etc. with C++.

Thanks again!

only know small snippets of things

The art of programming is really just breaking down large, daunting, programs into a collection of small snippets.

from Pascal to VB/VBA but only know small snippets

Pascal?!? You may be as old as I am!

The only challenge with C++ is that it’s been around forever and it is a massive “multiparadigm” kitchen sink beast. That, and the same problem any popular language will have; too many libraries to choose from. That said, depending on what you’re doing, it’s probably easier than you think.

JavaScript and Python, the “easy” languages, have a mind numbing number of libraries to choose from. NPM (JS) has over two million packages! While C++ suffers from some this a little, the core is well defined, standardized, and somewhat sane.

I want to learn C++ because Operating Systems

C, not C++, rules the OS roost. In the case of something like Windows, C++ will be a friendly wrapper over the soft C underbelly. C libraries often get C++ as their first abstraction. Other APIs might build over that C++ wrapper.

C is an amazingly simple language, actually. You usually end up building your own toolset to compensate for the simplicity, in addition to the massive library landscape. You might want to try it. People fear C as much as C++, so once you get the hang of it, you’ll have the confidence to do pretty much anything.

Amusingly, Linus Torvalds, creator of Linux and git, once famously said C++ is a horrible language preferring C. Part of his reasoning was that it’s too easy… Don’t take this too seriously, but it does probably express the view of C system programmers.

In your opinion and outside of syntax, what are the most challenging concepts to learn from the novice level?

Programming is hard. The language doesn’t really matter. When you’re first learning to program, you’re learning two very different things: the language itself and how to think like a programmer. Thinking like a programmer, breaking down problems and worrying out what’s needed, is simply not intuitive to most people. That you’re doing this at the same time as learning a language is doubly challenging.

However, if you’ve travelled from small snippets land, you probably have a leg up. Look at any beginner book and you’ll find the same play list: variables, types, strings, if-then,functions, loops, objects. Actually applying concepts is the challenge, really. Using versus learning.

I don’t think I need to worry about memory allocation etc. with C++.

That you even know that this is a thing… Don’t be scared of such things. You actually kind of do need to worry about it in C++, but modern C++ has a lot of tools to automatically take care of it for you (it didn’t always.) Knowing how memory allocation works is the gift, and the curse, of C/C++. A Java/JS/Python/whatever programmer has zero idea how memory allocation works; it doesn’t even come into play. Understanding such mechanics only gives you a deeper understanding.

It honestly sounds like you’re psyching yourself out: just do it!

When learning a new language, I usually write tic-tac-toe. It involves most of the moving parts you need to know in a language and it’s fun. Once it works, then you can start tweaking and learning more. I’ve written hundreds of tic-tac-toe games in every language I’ve ever used, or just played with.

There can be a degree of hubris in newb programmers: “I can write next killer app!” At the same time, struggling toward such lofty goals will always teach you something. Successful programmers have a high tolerance for frustration and a belief they’ll figure it out eventually. Each time you go through the “banging head against wall” phase and come out on the “I finally got it to work” phase, the more confident you’ll become.

Hmm… speaking of that hubris, long ago I started writing a tutorial for would be adventure writers. I’m not sure what state it’s in, but you could take a look at it. It has some C++ code, if nothing else: Colossal Coding Adventure. I should probably revisit that.

TL;DR: Just do it.

2 Likes

Baavgai thanks again for the most in-depth and enjoyable reply. It has given me a lot to think about
The fact that you “Had a calculus professor” firmly outlines my concerns about math, Algebra is a sweat-fest for me but moving forward, I am intrigued by the concept of being able to program a Tic Tac Toe game at all and I wouldn’t know the first thing. I am determined to change that, and ask if there is any code I could read, iterate, and learn so I can practice writing it until can do it without looking so as to fully grasp the moving parts concept…and the Colossal Coding Adventure…definitely will be looking more at that as I build familiarity. I am light years away from what you know but I am on the launch pad and determined to get to where I want to be. Any help you can provide is most greatly appreciated. I hope to get good enough to provide help to others, a lofty, but healthy goal!! Thanks again for your replies and encouragement. I must familiarize myself with VisualStudio as that is another daunting phase I can’t wait to master. Best D.

1 Like

I’m basically where you are, but as I take on more and more smaller projects, my overall abilities are increasing. I think it’s hard to remember sometimes, what it was like to learn how to read as a child, but I’ve taught lots of kids to read, and it’s just step by step by step, they’re reading “cat” and “run” and “hop” and it seems so slow for a long time. But after learning a handful of rules, like when to add a double consonant before -ed (stop becomes stopped but look becomes looked), one day it just pops and they are just reading.

It’s so easy to get discouraged, and think we’ll never get it, but I’m all for acknowledging the gradual increases in ability.

1 Like

Had a calculus professor

Calculus 1 was required for a computer science minor; in the early 90s. You can be a developer without a degree; I’d say at least half the real world computer professionals I’ve meet did not find their way there via university. You can also now get college degrees in all kinds of computer based disciplines, none of which lean heavily on math stuff.

I am intrigued by the concept of being able to program a Tic Tac Toe game at all and I wouldn’t know the first thing.

You do know the first thing, and that’s the point.

Even on day one, you’ll be introduced to printing. Still knowing nothing about programming, you’ll pass the dump stuff on the screen phase. Rather than dumping “Hello World”, or “My name is X”, you can worry out how to dump a few lines of " | | " and “—±–±–”, or some such.

Day two, let’s talk variables. They basically store state. State, in the context of Tic Tac Toe, is the state of the board. There are nine cells, each with three possible values. Knowing just variables, you could make 9 variables; cell01, cell02…cell09.

Day three, structure. Rather than 9 separate variables, it probably makes more sense to use an array or list. Do you want an something flat with nine positions, or three rows of three, or something completely different?

Now, back to day one, how do we print our neat little board and reflect our nine variable state? Do we want more variables, like turn?

Given what we have, can we change the state to show the first move on that board. The next move?

Can we tell if there’s a winner? If the game is over?

The point is, you don’t have to know the end of the story when you start. Instead, you have to be willing to start telling yourself the story in the first place, so you can find the spots you need to work on. You cannot envision the entirety of even a trivial program, but you can imagine the first step. Then the next?

It’s possible, nearly inevitable, that as you walk down a path, you’ll hit a dead end. You stubbornly stay on the current path, trying to break through? Or maybe take a few steps back and try a different route? Either way is frustrating, but that’s just part of the process.

I feel I should now set up a course on “how to think about writing your first Tic-Tac-Toe program.”

I hope to get good enough to provide help to others

This isn’t a bad way to learn. I can teach you something and you’ll be 100% sure you’ve got it, but you don’t really know you’ve got it until you have to explain it to someone else.

Hmm… I have a rubber ducky on my desk at work. Maybe try to teach the duck?

1 Like

That is a very good analogy with the reading, it becomes a little easier with familiarity. I find I have to stare at some code for a while to understand it. My passion appears to be the fascination of how things work. This can be problematic when it comes to programming because I spend so much time trying to figure out why a piece of code is written a certain way logically, how variables are used in ways I would never have thought to write. The problem with the interest in how it works is that it takes a while to actually start writing any code until I feel I “know” what I am writing. I am still noodling about with Access VBA as it is the only program I had to start learning any code with so my progress is there at the moment. For some reason I have a calling to learn C. I have C# on Visual Studio so I am now trying to work through the Tic TacToe challenge I set for myself based on the initial conversations with Baavgai. In think its essential to support and encourage and feel I get that here more than anywhere. I feel more confident now than when I signed up. Best D.

Baavgai, mentally on the way to getting started with the Tic Tac Toe challenge. I have as probably mentioned, Visual Studio which will provide me the environment for at least C# to get started. Prior to joining Codecademy, in my quest to figure how systems authenticate users with passwords, I started learning a bit about what == actually means. I only know vaguely how to get to the console in VS and have been able to lark about with boolean type variables and displaying if two numbers are equal or not". Once I felt a bit morwe comfortable with variables I started reading about arrays and Strings of Arrays to figure how to learn about reading info from a file into an array. So I have an idea and some familiarity with variables. I have noticed that it does get increasingly difficult to figure out the problem when tired at night and letting go and returning later refreshed. The thought trap - "As soon as it compiles, I’ll go to bed ". Looking forward to starting with the game and thank you for your continued help and insights, encouraging and supportive replies. Think I will start a new topic from here to stay compliant. ATB D.

how systems authenticate users with passwords

I’m afraid that one can be incredibly complex. There are one way hashing algorithms to store a unique hash of the password. But then there’s the trick of having the conversation in which you pass the password at all, usually a multi pass affair to prevent “man in the middle” attacks.

I only know vaguely how to get to the console in VS

If you run a console program, VS should pop it up for you. Just start a new project for a console program and you’ll get a template. Additionally, under View you’ll find an insane number of extra windows you can open up in the IDE. One of them is terminal. Depending on your VS version, you’ll get an integrated PowerShell tab… somewhere.

As soon as it compiles

This is an interesting, and generally useless, milestone. It means you got all the syntax right, but that’s about it. Statically correct junk is still junk. Stop when you get tired. Don’t be afraid to retrace you steps. Make lots of copies: you may figure out the one you did five tries ago actually made the most sense.

Yep, start a new topic specific to the next path taken.

This is called paralysis by analysis. Just get out of your head and start coding.

IT won’t be easy anytime soon, but you will get better at it.

1 Like

Thank you for your spot-on observation. I appreciate your encouragement I do suffer with Analysis Paralysis absolutely. One of the things I need to really focus on is that sometimes code is just written the way it is due to the way the language is constructed and that understanding beyond that is pointless. I do find myself trying to understand concepts beyond what I probably need to learn at my level - like the syntax of an array - (for each x in y.) My theory is that If I can’t understand how or why it is constructed and written, I won’t be able to write the code properly later on. Its a ■■■■■■ curse of trying to run a marathon before I can crawl.

1 Like