17

What do you do if you're not a good programmer?

I'm a 25 year old female who was just fired from my 2nd programming job for not being able to improve fast enough. I did the usual career path, computer science degree in 4 years and got a programming job at a very small electrical engineering firm right out of college. I was at that company for 2.5 years, but I really struggled and eventually I was let go. But I thought to myself: "well maybe that just wasn't the right fit! I did feel very lonely in that job! I'll try again elsewhere and ask to be more involved!"

So in less than a month, I got another programming job a much, much larger company, about 300-400 people, and I definitely felt less lonely. But it's only been 6 months and I've just been let go. I KNOW I'm not as fast as the other programmers, but its not from a lack of trying. It just takes me so long to figure out a problem compared to others of the same age/experience. I did fine in school. I got a 3.4 GPA, but I worked my butt off for a 3.4 GPA. I could never have gotten a 4.0 GPA. And I also minored in Japanese, so I had several liberal arts-like classes to bump up my GPA. It would have been much lower if I only took programming and math classes.

I've never been awesome at straight math. I can learn it, but its always been more rote-memorization of problem patterns. I'm very good at recognizing patterns in math class, rather than having a natural instinct for it. So if you give me an almost identical problem, I can solve it because its the same pattern to solving it, but I have only the barest true understanding of it.

And I think I did this to a certain degree with my programming classes without realizing it because I'm a great googler, great at recognizing patterns and mimicking them, and great at asking for help. But in the real world, you're not allowed to ask for much help because that takes time away from other people getting THEIR work done. You're expected to be your own little island, for the most part, and solve problems and often these problems or their patterns are not on google at all. Although I could sometimes find examples in the code base I was working with, but its not always guaranteed. I never cheated to get my degree, but the textbook or google was very good at providing pattern examples. And the problems were just never as deep! "here program this checkers or chess game" is so much easier than "hey I need you to modify this massive code base in a very specific way and don't break anything else without knowing what anything else does!" And you must show us you can self-learn and get up to speed in only 6 months because frankly we're only going to let the manager mentor you for 3 months because these problems should be easy because everyone else your age/experience has no problem figuring it out. (This was oracle SQL and webforms. And in my mind it shouldn't have been difficult either. But I still struggled even though I arranged my life around my job and did nothing but program, eat, & sleep the past month in an attempt to improve myself. But I knew it still wasn't fast enough.)

On the other hand, I'm great at foreign language, which is part of why I love programming. I view programming as a language or a pattern puzzle or something. I don't see it as math.

However, I seem to have a better memory for languages and words than programming. I find myself forgetting stuff all the time and having to relearn it. I have the core concepts down, but if I haven't seen that particular piece of code in a few months and I've been buried in another part of the code, I've forgotten a great deal of the previous code. It's just so freaken hard to remember it all! And I try to write down as much as possible! I describe it as being buried in "French" for awhile, then being told to go get buried in "Japanese" for awhile, but don't forget a single word of "French" while you're in Japan because you'll be expected to go back to it asap. Yet this is all the same language (SQL), it's just different parts of a massive code base.

I have great memory for languages and quotes and all kinds of wordy stuff. But I always feel like a computer with less HDD storage when I'm trying to remember ALL the things I learned from previous projects and all the tips/tricks of dev tools and languages. I feel like an alzheimer's patient when it comes to programming because there's SO MUCH to remember. I actually think memorizing an entire foreign language with its grammar rules is far less complicated than remembering everything you need for programming.

Is there anything I can do with my computer science degree if I'm just not smart enough to be a programmer? I did ask my previous employer if they would switch me into an IT position, but they said "no, that's an entirely different skill set. we hired you to be a programmer. So get used to it or leave."

Would I be capable of doing IT or it is just as difficult as programming? It doesn't seem as difficult when the IT person right next to you is on facebook half the time and in comparison you're desperately using every minute to try to get better at programming because you're too slow to solve problems. But maybe those guys are just geniuses at IT and that's why they have free time for facebook.

I don't know if I could do something like business analyst or not, or if I could even get anyone to let me try. My huge problems are analyzing and understanding large amounts of code I didn't write, and coming up with a good solution in a reasonable amount of time. When I finally do understand HOW to solve the problem, writing the code is pretty quick. Although I can still get tripped up on syntax or structure sometimes aka I'm still a slow programmer.

If I could work at a speed that's natural to me, then it would be ok. But that speed isn't profitable to anyone, freelance or corporate or otherwise.

I need to be a "programming secretary" or something, where they always give me baby problems, or they give me the exact answer of a complicated problem and I go code it. That's the only way I can get done quickly because anything more complicated is going to take too much time and I become unprofitable.

I'm the person who seems like a great fit at first because I come with entry-level skills, but then I can't get past entry-level because I'm not smart enough. I'm trapped. I'm stuck.

I know I've improved a lot since I left school, but its not the level of improvement I need to compete with my peers, not even close.

I have a great personality and have no difficulty talking to people although I'm introverted. So that's probably why I "ace" interviews because many programmers are very intelligent but very mole-like and don't have a personality. The only time I don't do well in interviews is if the interview is very programming-intensive and makes you solve complex problems on the spot. I can talk about technologies and techniques all day. But let me start solving problems in front of you and I will definitely be entry-level or average at best. But that always makes people think they can improve me! They look at that and think, "Oh she's got the basics down, she just needs a little polish and shine to really fly!" But its been tried twice now and I couldn't get up to speed fast enough! Not in a super-small relaxed company who gave me 2.5 years to do it, and not in the high-strung corporate company who only gave me 6 months to prove myself.

UPDATE: I do keep lots and lots of notes while programming in attempt to remember everything, settings, pieces of code, etc. And as for working on programming outside of work, I'm usually so exhausted from "mind-grinding" all day that I don't have any intellectual energy left. I did programming as a small hobby as a kid with the idea I would do bigger stuff if I didn't have to go to school, so I got a job in it. But now that I give 40 or more hours a week to it already, I have no desire to spend an extra 10 hours on top of that! I do have outside interests!

I don't know what I'm going to do yet, but its nice to hear encouraging words from both sides of the opinion fence. I want to go and find another programming job so bad, but I'm afraid the exact same thing would eventually happen. I wouldn't be able to keep up and they'd get rid of me. I hate constantly looking, I want to be good at the job I do! I've always been good in school. I loved school with all my heart. But so far I've always hated the work world because I just can't meet the standards that I need to meet. Job satisfaction comes partly from being GOOD at your job.

closed as off-topic by gnat, Philipp, Lilienthal, Masked Man, HopelessN00b May 21 '16 at 17:42

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Real questions have answers. Rather than explaining why your situation is terrible, or why your boss/coworker makes you unhappy, explain what you want to do to make it better. For more information, click here." – Philipp, Lilienthal, HopelessN00b
If this question can be reworded to fit the rules in the help center, please edit the question.

  • Comments are not for extended discussion; this conversation has been moved to chat. Please continue the discussion there, not here. – Monica Cellio May 22 '16 at 18:34
  • Just to pick a couple of points from all you've written - looking at other people's code in a working project can be very very tough - personally I find that very demanding, far harder than creating something from the ground up; you might find that you are better in a situation where you can start from scratch. Also, for many types of project, maths isn't particularly relevant, so don't obsess over that. – peterG May 23 '16 at 1:13
  • Forgetting stuff as a software developer is perfectly normal. That is why you constantly need to test yourself to see what you're forgetting and rework on relearning those specific parts. See oxbridgenotes.com/articles/janki_method_refined – Stephan Branczyk May 23 '16 at 6:53
15

That feeling that you might not be good enough is absolutely terrible, so I can sympathize with you on that one. I typically get it when I first start a new job and have to dive into thousands of lines of new code. It's daunting, and it definitely takes a few month (up to a year, even) before I feel comfortable with the projects.

That being said, with experience has come self-confidence and the knowledge that anything can be figured out given some time, and if you're willing to put in some effort.

Programming Techniques

I'll describe some of the techniques I use when facing a new code base:

First of all, reading method after method of code is pretty useless. Methods are most often not written in the order in which they are called, so there's nothing to be gained by staring at thousands of lines of code. Instead, pick some functionality and build a flow-chart diagram of the code process behind it:

"Ok, so clicking the "Save" button triggers the "SaveMethod", which grabs the information from the form, builds an object using the "UserInfo" class, then calls the "ValidateData" method and passes the object, ...

Once you understand how the logic flows it will all start making a lot more sense. Now if your manager tells you there's a bug in how the new User information is being saved to the database you know that there's probably a problem in the validation or save methods, and immediately know where to start your investigation.

When I start a new job my notebook is full of such diagrams, notes for myself, etc. I also copy interesting methods, or pieces of code into notepad++ and create a little archive for myself. Like you, I don't actually memorize code, and often forget the details on how to accomplish a certain task. However, I remember where I last used that technique, and can find that code again pretty quickly. Even most senior developers I've met agree that without Google their lives would be a lot more miserable.

What you have to focus on in order to be a successful developer is understanding good design and programming principles, and gain a solid grasp of logic.

You don't need to memorize code, but knowing that if X is failing the problem is most likely Y is pretty vital. Or, given a real-world process, being able to think up the logic to implement that process as an application.

Similarly, you don't need to fully understand the inner workings of a major project in order to modify it - only the chain of logic which is experiencing the problem. Hence, build flow charts of each one as needed, and tackle them one at a time. First the "save" button, next the "delete", and so on. Eventually the whole project will make sense and you won't even need the diagrams anymore.

Career Advice

It's a little bit disconcerting that you have almost 3 years of experience under your belt and you still don't feel comfortable in your field. The above is the sort of advice I would give a developer fresh out of school, not someone who should by now be performing at an intermediate level.

However, this does not mean that you should give up. For example, you mention that you had a 3.4 GPA - that's not bad! You think you did poorly in math? I'm not going to claim to hate math, but it sure seems like math hates me sometimes. And yet I'm doing quite well in my career. Furthermore, I also love languages, and writing. Growing up everyone was convinced that I would end up a journalist, or writer; my family was shocked when I went into engineering.

But although I love languages, reading, and writing, I also love logic. I'm a pretty creative person, which seems counter-intuitive, but comes in very handy when thinking up solutions to a problem. I also love organizing things - whether it's the contents of my fridge, the files on my HDD, or the logic of my program. Designing a new system is what I live for. Hunting bugs feels like a punishment by comparison, but as my coworker puts it every time I complain:

Hey, you paid money to be here!

And so, do some soul searching. Do you love solving puzzles? Problems? Organizing ideas, and methods? Programming might indeed be your calling! You just need to recognize those traits in yourself, and learn some techniques to tackle large code bases.

I'd like to point out one more thing: University, while great for drumming great amounts of information into you, often fails to teach you the practical skills you need in the workplace. I went to university and then college, and the difference how they approached teaching was night and day. Furthermore, your first job was at a very small company, where it's quite possible that you were not exposed to industry standards, practices, and expectations. In other words that may not have been the best environment for you to launch your career. It's clear that you need some mentorship, however working for people who don't know what your job really entails is far more likely to result in picking up bad habits and stagnation than in any real professional development. That's where working on tutorials in your spare time comes in. As I said, focus on programming best practices, etc.

I would start looking for a new job and, when asked why you were let go, simply say that both you and your employer realized that you were not a good fit with the company culture (or something along those lines). You'll get over this if you don't lose your confidence.

  • 2
    Solid advice... – Kilisi May 21 '16 at 15:33
  • I wish I was at least half as good as you are writing up answers. Have my upvote, this is basically what I tried to say. I really enjoyed reading this answer – Just Do It May 21 '16 at 15:57
  • 2
    @JustDoIt - thanks! I've always loved reading, and it helped me develop strong written communication skills. I also see writing up answers as logically organizing ideas on paper such that they flow well, so in a way I think up my points, make a mental flow chart of what I want to express, and go from there. – AndreiROM May 21 '16 at 16:01
  • I'm pretty eloquent in my native language, but I always sucked at writing in English, but I like that approach, I shall give it a try – Just Do It May 21 '16 at 16:31
  • 1
    Even most senior developers I've met agree that without Google their lives would be a lot more miserable. Definitely. Programming and various ways to do something are so chillingly numerous, that no person in the world can remember all the things without checking at least something. Not because they are bad programmers. OP appears to be asking her colleagues first before searching online - I think that's the problem the manager had. – Juha Untinen May 21 '16 at 17:44
8

I don't know if I could do something like business analyst or not, or if I could even get anyone to let me try. My huge problems are analyzing and understanding large amounts of code I didn't write, and coming up with a good solution in a reasonable amount of time. When I finally do understand HOW to solve the problem, writing the code is pretty quick. Although I can still get tripped up on syntax or structure sometimes aka I'm still a slow programmer.

Just to be clear this is all programming actually is. I work at a major tech company and just spent around 4 months* analyzing and understanding a code base I didn't write. Now I'm spending 2 months writing out the solution. That's basically the job in a nutshell.

Just my opinion but I have a hunch you're bright and are just struggling with the normal part of what's difficult about programming and takes forever to learn. You could be making any one of a number of mistakes that are obvious to me by now but it all revolves around a willingness to move forward with a solution on top of an incomplete understanding. Do not read a file line-by-line to understand it. Do skim it and try to find main plot points and assume the rest works out.

An aside but you could clear up most syntax slowness with an IDE (IntelliJ for Java, for instance. Sorry not sorry to plug IntelliJ over Eclipse.)

Discussed many times on programmers.SE: What is the most effective way to add functionality to unfamiliar structurally code etc.

I got called out for exaggerating this, so here's the breakdown: one quarter (3 months) was budgeted to researching the design for a complex project to one engineer, who spends about 1/3 time on other duties. So there was 2 months of design budgeted. In that time I evaluated solutions on top of two very different tech stacks. So the tech stack that won the design had about 1 month of analysis that led to 2 months coding. My recent project had unusually separated "design" v. "coding" phases so it made for a useful example as a proxy for "analyzing code" and "writing it," even though in reality "design" is a bit different of a goal and writing code still entails a lot of analyzing code.

  • Yep, I thought something similar, so I deleted my comment. Upvoting for saying it's a normal part of programming (which it is) – Kilisi May 21 '16 at 15:22
  • @Kilisi And I would can anyone that started coding for the sake of coding before they had a clear understanding of the problem and a clear game plan. – paparazzo May 21 '16 at 15:23
  • @Paparazzi So would I, just the timeframe to come up with the plan I was moaning about (unfairly) I often forget how complex some problems can be :-) The guys doing my stuff have 20 or 30% years solid experience, so they make things look very easy. – Kilisi May 21 '16 at 15:25
  • Another upvote for "this is what programming is." I think one of the most extreme examples I can recall was a coworker spending 3 or 4 months evaluating a codebase trying to figured out some bizarre behavior. The eventual solution was moving one line of code down a few lines. It happens. Even when developing new code, though, I tend to spend far more time thinking, drawing diagrams, taking notes, etc. on how the system should be designed than actually typing code. There are many days where I don't write any code at all. Welcome to engineering. – reirab May 21 '16 at 16:39
  • 1
    @Kilisi I added an edit that makes this answer a bit more honest, which might interest you. – user42272 May 21 '16 at 16:51
5

As someone who thought the same about himself, I can tell you that I understand your position, it is a terrible feeling; and the idea of switching careers crossed my mind several times.

BUT

One thing I learned over the course of this past year is that when you're in the programming field is that what you do at work is okay, but what really matters is what you do after you clock-out.

I know that maybe watching a movie or playing a game might seem more interesting than sitting down to read tutorials or practice code. But I think that programming is one of the careers where you can't just simply put your learning progress in pause. Although it doesn't mean we cant have fun from time to time. It's all about a correct balance between work, life, and programming.

Getting a degree is no excuse to stop learning/studying, I have 2 notebooks at work, with notes of SQL, C#, Networking, the ERP Software we use, and more. Why? Cause whenever I feel like I'm forgetting something I can simply go back to my notebook and see what I was missing. And there's no shame in having your notebooks to write stuff down.

Yes, there's always gonna be better programmers than you, you can be certain about it. But don't use them as reference for your own growth, focus on yourself, on your learning.

Maybe switching careers is the easiest path, but be aware that you're gonna bump into a lot of similar situations regardless of the career, there's always gonna be someone better at giving support, someone faster at translating, someone just better at whatever you're doing at that moment in your life. So don't let yourself feel down about it, it's normal. Be your own reference for growth comparison.

  • 1
    I like the notepad idea, I use text documents myself, but back in the old days I carried a notepad with me. – Kilisi May 21 '16 at 15:16
  • 2
    I do have text docs and some sticky notes(app) but for some reason writing it down makes it easier to remember. – Just Do It May 21 '16 at 15:20
  • 1
    @JustDoIt Personally, I agree that handwriting can make things easier to remember and it also makes it a lot easier to jot down diagrams and such, as well as math. However, handwriting doesn't have to be mutually exclusive from taking notes on a computer. I've found keeping notes in OneNote on my Surface Pro to work very well (and of course there are many similar applications and devices nowadays, those are just what I use.) With this, you get the benefits of handwriting and also the benefits of cloud backup and accessibility from nearly any device. – reirab May 21 '16 at 16:59
  • +1 for mention of OneNote. The perfect tool for this kind of note taking. – Michael Karas May 22 '16 at 5:18
2

As a manager, it sounds like you were terrible at both jobs. That doesn't tell me that you're a bad "computer programmer", it tells me that you're not good at certain types of programming and were a bad fit for those jobs.

There are many types of programming jobs out there – you should look at different environments to see what works best for your capabilities. This isn't just concerning languages, but actual products you'll be working on. For example, Interactive and Advertising agencies tend to have smaller projects that you'll work on from the ground-up, while "Tech Companies" will have existing larger projects that you'll be expected to grow and maintain. Someone who is an "industry expert" of work is very likely to be absolutely terrible at another.

Beyond that, there are other positions that leverage CS backgrounds. One is "developer evangelists", "sales engineer" and other things where you'd be employed by CompanyA and are used to help their clients/prospective clients (CompanyB, CompanyC, CompanyD) implement their technology. If you like people, that's a great career path.

  • 1
    +1, especially for the last paragraph. There are lots of developer evangelist and sales engineer positions available. These positions may also suit you well if you like to travel, since many sales engineers frequently visit their customers. Of course, there are many other non-programming or minimal-programming things you can do with a CompSci degree, too, such as server/IT infrastructure management. And, of course, there's always theoretical Computer Science, though that's probably not a good fit if you don't like math. – reirab May 21 '16 at 17:46
1

My experience is that what you're told when you're fired is meaningless and it's possible based on what you've said is that you currently don't have any USEFUL data yet on "whether you're a good programmer." Here's my answer to how to get that data: work for a company that is managed differently. Here's a couple things I would look for / my experience of what I find effective in a software company, but first a quick digression:

Any manger that fires you after 6 months without any substantial feedback (except for something blatant like sexual harassment) is almost certainly incompetant. Why? Because it takes on average over 1 month to find someone in the first place and that includes over 30 interviews and I've heard over $10K in cost. Imagine hiring a wedding planner that interviewed 30 vendors, spent $10K, and then said that they had nothing to show for it. Furthermore, you might have heard that most companies are paying I would estimate double than that to try to get women so that can claim to be diverse (and not get sued.)

But back to what I'd look for:

  • On your first day, you should be able to build, run tests, and make a trivial change to anywhere in the code in about 1 hour. For example, at my current company we have dozens of microservices, SQL DB, NOSQ DB, big data pipeline (Kafka/Storm), etc. but we've automated everything so you get every setup locally in under an hour. What I've seen is that in some companies/projects it takes weeks to get through this and in some cases you can't even run everything locally which makes it really hard to understand.

  • On your first day someone should be able to explain to you how everything works in about 15 minutes. Now they might have to use big (unfamiliar) concepts but it should boil down to something like "We have a realtime data pipeline that ingests 1M events/s from our MQTT queue using Kafka/Storm on a single topic and we have a dozen Storm bolts that insert that data into Cassandra and perform some basic analytics for error handling." Another example might be something like "we insert 100K records/day into our SQL DB using 10 different forms and then we run about 100 different queries against that data resulting in 200 views. We present the data using React/Flux to implment MVVM on the client and use REST webservices with the CRUD repositroy pattern + an ORM on the backend." Now each of these topics might take a while to understand but my expirience is that it's much easier to study a topic like MVVM then something broad like "dynamic data binding."

  • In your first week you should be given a bug to fix (or maybe a test to write) that takes less than 1 day (this actually applies to all tasks in some understandings of SCRUM). If it takes longer than someone will meet with you to explain things and work with you. I would generally want to see someone complete 30-60 individual tasks (with supervision) before I declared them incompetent.

One other point - the only way to find a company that has these type of things (in my expirience) is to talk to someone who works there BEFORE you interview i.e. network with someone and ask them what it's like.

  • I agree with first paragraphs, but not so much with your bullet points - they are rather subjective (although the third one is pretty reasonable). For example, I don't necessarily think that being able to write a test or make a change in an hour is indicative of anything. It really depends on the project, etc. Similarly, being able to express how a system functions (at a very high level) in 15 mins is not necessarily going to help that person get a grasp of the code base. – AndreiROM May 21 '16 at 16:48
  • 2
    "On your first day someone should be able to explain to you how everything works in about 15 minutes." This will vary dramatically depending on the problem domain. Where I work, just explaining the problem domain to the point that a new software engineer understands the problem they're supposed to be solving takes weeks, even for very experienced software engineers. – reirab May 21 '16 at 16:54
  • @AndreiROM - I understand your point. My main emphasis is that its sounds like these team have been badly run and so the feedback doesn't mean a lot. My point about the system is that many companies have a terrible grasp of the system which does indicate an ineffectice team. I agree that the converse isn't necessary true but I more trying to make a general point. – Charlie May 21 '16 at 17:14
  • @reirab - In my experience 90% of problem domains can be explained in 15 minutes so that's what I'm going off of. If the question was more specific such as "why am I bad at writing kernel code" than I wouldn't have said that. – Charlie May 21 '16 at 17:16
  • @Charlie - I think the OP got hired at a very laid back company that didn't know how to train her when she first got out of school, and that lead to her forming bad habits. She then moved on to a software shop that had very high expectations, and she was probably let go at the end of her probation because it's a lot less of a hassle than getting rid of her after she's an established employee. Is it bad management? Maybe. But I think there's a bit of fault on both sides. Still, the OP can probably pull her career out of the fire. – AndreiROM May 21 '16 at 17:17
0

First of all, I agree completely with Just Do It's answer that trying to continue learning on your own time could be extremely helpful to you. Quite a lot of the knowledge I possessed before I started working came from tinkering with things in my own time and I've found that to be true for most of the best engineers I know. The knowledge you gain in a Computer Science degree is extremely valuable and, for some software development jobs, nearly indispensable, but it's not necessarily sufficient on its own.

Here are some things you can try on this front:

  1. Tinker with developing new types of applications or new APIs at home. This was how I started learning sockets programming, for example. I also learned nearly all of my web development knowledge that way, to the extent that I could do some small ASP and PHP free-lance projects as well as some projects for the Computer Science department by the time I started college.

  2. Read some books on relevant programming languages, APIs, best practices, etc. These books can also be useful references later when you're trying to remember how to do something.

  3. Take some free online courses. While you are between jobs is an especially great time for this. Many universities are now offering free versions of several of their courses online. You don't get credit toward a degree from it, but you do get the knowledge and practice. You can find courses on everything from introductions to programming, to introductions to new languages, to advanced-level Computer Science courses. Since you mentioned that you have worked in an engineering environment, if you want to stay in that type of environment, it might also be worth your while to take some introductory courses relevant to the types of problem domains you want to work with. For example, I primarily do embedded systems development, so taking an intro EE circuits course online would be useful in that sort of position. Coursera and edX are two organizations through which major universities offer such free courses.

  4. This is similar to #1, but deserves its own bullet: Contribute to open-source projects. Again, this is a great thing to do to increase your experience while between jobs, but is also useful for broadening and/or deepening your development knowledge and experience on the side even while you're employed. What this gets you that tinkering on your own doesn't is more experience working with an existing code base and working with a team. Additionally, significant contributions to a project are something that you can point to on your resume/CV and/or in interviews (and provide links to as an example of your work.)


Second, you might want to explore software development jobs in different problem domains. Software development (and, even moreso, information technology as a whole) is an extremely broad field, perhaps even moreso than electrical and mechanical engineering nowadays. Almost anything you like doing, there's probably a related programming position (or many such positions) out there.

Perhaps you simply didn't enjoy the problem domain you were working in before and were not motivated by it. It may also be that the problem domain you were working in before didn't play to your strengths. We all have some things we're naturally better at than others, so identifying your personal strengths and looking for positions where you can put those to work is always advisable.

As an example, some problem domains inherently involve a lot of math. Some of them require doing calculus on a more-or-less daily basis. Others (like mine) require understanding calculus and doing some every now and then, but not very often. Many others never require anything more than basic algebra. Someone who likes math could find the former types of positions more interesting, while someone who doesn't will probably find the latter types of positions more interesting.

Not the answer you're looking for? Browse other questions tagged or ask your own question.