how "smart" do you have to be to become a software engineer/programmer

axlryder

victim of VR
Jul 29, 2011
1,862
0
0
I realize that the implied complexity of the title question's answer is a little too simplistic, but it was mostly just to give people the gist of what this thread is about. Obviously this thread is mostly directed at people who do indeed work in computer science or are at least pretty far into their school for it.

So I've been a nurse for the past few years and, after much deliberation and a series of health problems, have decided it's not worth it anymore. So, during these last few days off I've started learning C++ (mostly because that is apparently the hardest language to learn and the first one most programs seem to teach).

I've made a few rudimentary programs (an atm interface, a menu that returns various random functions (such as finding out if your number is prime, reversing it, summing it, etc.), a guessing game where you guess the program's number or the program tries to guess your number, and a couple of others)

I've done some of this from tutorials, and a lot of it was from a series of exercises that just told me what to make and I had to try and figure out how to make it. That said, I've struggled somewhat with a few of these programs. Wrestling for an hour or two on a problem that, in retrospect, had a very simple solution. I also don't really feel myself coming up with new program ideas using what I've learned.

Math was also always my weakest subject (I only ever took algebra 2 and stats). I did do well in logic, but I found myself starting to struggle when it came to propositional calculus (Granted I never studied in that class, but I still remember feeling disappointed in myself).

So I guess I'm asking, do you need to have "the knack" for programming right from the beginning to know you'll succeed? Is there a high entry level threshold of certain intellectual abilities to become practically proficient? Do most programmers struggle with the simple stuff in the beginning? Should I just keep at it? I know not everyone is going to go at the same pace, but I just want an idea of red flags or green flags I should be looking for before deciding if I should back to school for software engineering.

Thanks for any feedback.
 

Adam Jensen_v1legacy

I never asked for this
Sep 8, 2011
6,651
0
0
Keep at it. Everyone can learn programming. It's a skill. It takes practice and dedication like any other skill. Obviously people with a knack for it will have an easier time and they might have that natural ability to devise ingenious solutions to problems. Maybe you're one of them. You won't know unless you try.

If it helps, I know a complete moron who happens to be a programmer. He doesn't have a logical bone in his body, yet somehow he managed to finish IT school and he's been a programmer for 20 years now. I mean dear lord this man is so STUPID you can't help but wonder how he managed to go through elementary school. My guess is that he's just a code monkey who does what he's told.

You shouldn't try to learn C++ as your first language though. It's frustrating and there's not much that you'll be able to do with it on your own so you'll hardly feel like you've learned anything useful. My advice is to start with something easy like Python or Ruby. Perhaps C# or Java. Minecraft was made in Java.
 

wizzy555

New member
Oct 14, 2010
637
0
0
I've done some of this from tutorials, and a lot of it was from a series of exercises that just told me what to make and I had to try and figure out how to make it. That said, I've struggled somewhat with a few of these programs. Wrestling for an hour or two on a problem that, in retrospect, had a very simple solution.
That is entirely normal. When you start you will probably be writing massive programs then scrubbing them and doing it again in half the size. C++ is difficult precisely because it doesn't have systems (unless you get extra tools) for finding common and odd mistakes. Modern slower languages are running constant checks and will usually point you to the problem quickly.

I also don't really feel myself coming up with new program ideas using what I've learned.
Do you have a task in mind? Learning to program probably won't give you ideas for what to make, in this day and age most of what you want already exists. I program for a scientific experiment, so I get the idea of what I need to make (either to accomplish something or to make a tool to make my life easier) and then think of how to make it.

If you can't think of new programs to make, make things that already exist.

So I guess I'm asking, do you need to have "the knack" for programming right from the beginning to know you'll succeed? Is there a high entry level threshold of certain intellectual abilities to become practically proficient? Do most programmers struggle with the simple stuff in the beginning? Should I just keep at it? I know not everyone is going to go at the same pace, but I just want an idea of red flags or green flags I should be looking for before deciding if I should back to school for software engineering.
I like programming more than Math, higher math tends to embody complex ideas into short but complicated and expanding notations and it all gets very hard to keep track of (and of course it has to be in your head), but once you've mastered a programming language you will at least understand what it is doing, even if you don't understand the reason why.
 

DoPo

"You're not cleared for that."
Jan 30, 2012
8,665
0
0
axlryder said:
Math was also always my weakest subject
OK, first of all, there seems to be a myth that you absolutely NEED Math in order to do any programming. This is not true, and I'm not entirely sure why it is perpetuated, as well. When I was in school, I kept hearing this, quite a lot since I did want to do software development when I grew up. Well, I now have an MEng in Software Engineering and I'm working full time in the field - the amount of Math needed isn't that great. Sure, it helps but it's not mandatory, not for all fields, anyway - most of the time you either need an approximation (if I have double the things, does it take double the time?) or you just whip out a calculator and look up what you need.

Again, some fields are more demanding: formal methods or security/cryptography related stuff, for example, or maybe if you actually get into the science-y part of compsci but there are plenty of opportunities out of these, as well.

axlryder said:
So I guess I'm asking, do you need to have "the knack" for programming right from the beginning to know you'll succeed?
Well, yes and no. I'd say you certainly need "a knack", I guess. I'd call it more of a "proper mindset" but I don't think you definitely need to have it from the beginning. When I started uni, I spent a lot of my first year not exactly knowing what I was doing. Sure, I produced code and it worked, but I was in a similar situation as you - a lot of the code was from were from tutorials and exercises. And then, rather suddenly, to be honest, I actually understood what I was doing and, in fact, how to do it.

However, I'm totally not saying "yeah, anybody can do it, and if you can't you're dumb", don't get me wrong, I'm just saying you don't really need to have some inherent ability that activates the first time you see code or something. I had a friend of mine, who started uni same time as me. In the middle of the second year he realised that coding really wasn't for him. He knew and understood the theory about software development, but when it came time for the coding itself, he just couldn't really do it. Not everybody can, I suppose. I can't do a bunch of stuff, as well - in general nobody can do absolutely everything.

At any rate, I don't think there is anything that would tell you for definite from the start "this is for you" or not.

axlryder said:
Is there a high entry level threshold of certain intellectual abilities to become practically proficient?
As I said, not exactly. I guess, the most desirable qualities for a software developer are the ability to learn and adapt, since there is always new stuff around and you need the knowledge.

axlryder said:
Do most programmers struggle with the simple stuff in the beginning?
Yes, most definitely. As I said, it took me most of my first year to understand the coding bit. A lot of people at uni also had problems at the time, some even well into the second year, some beyond. Sure, a subsection of these was just mostly lazy who couldn't be bothered but certainly not all of them.

axlryder said:
Should I just keep at it? I know not everyone is going to go at the same pace, but I just want an idea of red flags or green flags I should be looking for before deciding if I should back to school for software engineering.
I'd say yes - keep doing it, see how it goes. A small litmus test I can think of is "Do you like it?" - I found solving problems to be quite fun, myself. Well, "fun" may be giving the wrong context, but it is rewarding. My friend who wasn't into coding, on the other hand, didn't. Probably one of the reasons he wasn't into coding. I had another friend as well - he, in turn, was on the other side of "not into coding" - he did really well the first year but then his words were "No, I do not feel like spending my future staring at code on the screen." before he withdrew from the compsci course.

Anecdotal examples, yes, but still - bottom line is, some people just aren't into it. See if you're one of them.

Feel free to ask any more questions, you want - I'll try to answer them to the best of my ability. I'm not really good at C++, however, just bear that in mind.
 

Zombie_Fish

Opiner of Mottos
Mar 20, 2009
4,584
0
0
axlryder said:
So, during these last few days off I've started learning C++ (mostly because that is apparently the hardest language to learn and the first one most programs seem to teach).
One point to bear in mind about C/C++ is that while it is the first one a lot of programs teach, part of that is because it is often assumed that students already have experience with some programming language. I would personally suggest a simpler language to start with if you're completely new, and then move to C/C++ when you want to go lower level and get more of an idea as to how the computer actually works.

That said, I've struggled somewhat with a few of these programs. Wrestling for an hour or two on a problem that, in retrospect, had a very simple solution.
This is normal. I once spent nearly a whole day trying to figure out why one of my arrays was being overwritten when I realised that I wasn't allocating enough space to the array just before it in memory.

People struggle with things that have really simple solutions all the time.

I also don't really feel myself coming up with new program ideas using what I've learned.
It's much easier to take an idea and think about how you would program it using what you know/can learn than to do it the other way round.

Math was also always my weakest subject (I only ever took algebra 2 and stats). I did do well in logic, but I found myself starting to struggle when it came to propositional calculus (Granted I never studied in that class, but I still remember feeling disappointed in myself).
Unless you're working on some area of computing which relies heavily on theory, such as machine learning, image processing, crypto etc., you really don't need much Mathematics experience. And even if you need to use that stuff, chances are you will be able to get away with just using a library, so you don't need to actually get dirty and know the implementation details of it.

The only other way in which Mathematics might help would be if you're applying for a job and the company ask you to do a programming/coding/technical interview. And even then, it's a very different kind of mathematics to what you were probably taught in school, so you're probably better off grabbing a textbook for it anyway [http://www.amazon.co.uk/Cracking-Coding-Interview-6th-Programming/dp/0984782850/]. Also, not every company requires it to the same degree: People applying to Google, Microsoft, Amazon etc. will have 5+ interviews that feature coding/maths problems, but my friend who was offered a job at BAE Systems Intelligence was only ever asked to code FizzBuzz [https://en.wikipedia.org/wiki/Fizz_buzz], and another friend who was offered a job at a startup in San Francisco did no coding whatsoever in his interview.

So I guess I'm asking, do you need to have "the knack" for programming right from the beginning to know you'll succeed?
If you ever want confirmation that you don't need a knack for programming from the beginning, I am more than happy to send you the Visual Basic.NET program I wrote for my A Level Computing individual project.

I still cannot bring myself to open those files five years on; the code cringes me so.

Is there a high entry level threshold of certain intellectual abilities to become practically proficient?
Not for programming in general, no. I say 'in general' because there are areas -- such as applying for work at blue-chip companies or working on more research-y projects -- which do, but almost nobody ends up in those areas at the very beginning of their programming career.

Do most programmers struggle with the simple stuff in the beginning?
Yes. That's like asking if most violin players struggle to get the finger positions right in the beginning.

Should I just keep at it? I know not everyone is going to go at the same pace, but I just want an idea of red flags or green flags I should be looking for before deciding if I should back to school for software engineering.
As DoPo said, just make sure that you like solving problems with code. If you do then keep at it.
 

DoPo

"You're not cleared for that."
Jan 30, 2012
8,665
0
0
Zombie_Fish said:
my friend who was offered a job at BAE Systems Intelligence was only ever asked to code FizzBuzz [https://en.wikipedia.org/wiki/Fizz_buzz], and another friend who was offered a job at a startup in San Francisco did no coding whatsoever in his interview.
When I applied for my job, I did...well, essentially FizzBizz, albeit, slightly more complex. Namely, it was verifying ISBN numbers were correct - multiply each number by its position, sum these, see if they are divisible by 11. Done. I was qualified enough with Java, according to that.

The ISBN task always shows up in the code tasks in my company, and here is an interesting story: normally, we tell interviewees "You can use any resources you want", since, you know, pretty much every programmer ever would google this or that on a regular basis, so it's only fair to allow that for interviews. One guy went "OK, sure" and googled "check isbn in java" and copy pasted the code. And it worked. Also, the interviewers were impressed - it solved the challenge and it was something nobody did before. OK, the guy didn't end up hired but it wasn't because of his Java proficiency.

Zombie_Fish said:
I still cannot bring myself to open those files five years on; the code cringes me so.
"Who was the fucking idiot who wrote this piece of shit code?! Oh...it was me."

There is code I've written a long time ago I'm not proud of, and then there are regular occurrences like the above.
 

Barbas

ExQQxv1D1ns
Oct 28, 2013
33,804
0
0
I say just give it a go. Whap your knowledge out and just give it a righteous fuyckin' smash, son. Having the "knack" obviously helps you out a bit, but it's not a necessity. You'll probably enjoy it and find that it hones your skills to a fine point. And that's really what you want.
 

Secondhand Revenant

Recycle, Reduce, Redead
Legacy
Oct 29, 2014
2,566
141
68
Baator
Country
The Nine Hells
Gender
Male
I had to out riddle three sphinxes and even then I only was granted the privilege of taking the classes because the other candidate was in the hospital. The constant battles with the ghost of Newton were trying but manageable. So very possible.
 

Shymer

New member
Feb 23, 2011
312
0
0
Programming is a more diverse role than many consider it to be and can accommodate people from a variety of backgrounds, strengths and weaknesses. There are many aspects of maths which are quite important to have a good grasp of - algebra is crucial as most programs use variables and substitutions, for example - geometry would be useful if you are working in the field of graphics. However some people code from inspiration - creatively - others need direction and someone to give them a task to solve. People vary in the speed with which they can crack problems.

The issue is probably not the time it takes to crack (apparently) simple problems, although it might be a concern that you may not enjoy complex programming if the problem is too tough. If you enjoy the puzzle, if you enjoyed the tutorials and the debugging and the satisfaction of a correct output, then those are good signs.

I studied software engineering at university - which is very maths heavy - but quite esoteric mathematics. Logic is part of it, efficiency, predicate calculus. It led me into developing control software for robots - where the maths was beyond complicated. Virtual work analysis using complex transformations of polynomial expressions. The coding part of it was relatively simple. Elegant and efficient algorithm design suitable for parallel computation was not.

That - however - was a very niche, academic and engineering-style coding. The skills you need for web development are very different - different again from games development - or database work. Even the capability to program macros in spreadsheets is valuable to many businesses and not in huge supply.

The basic question is - do you enjoy it? With the right skills, which anyone can learn if they have the inclination, associated jobs can pay quite well. But it can be a very lonely job I have found - often with unsociable hours. In the end I couldn't stand being parked in a cubicle for months on end. I found out I thrived on human contact and software development really didn't give enough of it to me. I no longer use the skills I developed at university and I am a systems engineering consultant - which I am very happy with.

I can only imagine the cultural shift from nursing into software to be quite substantial. Best of luck.
 

DoPo

"You're not cleared for that."
Jan 30, 2012
8,665
0
0
inu-kun said:
but if you want to really excel you need maths for the best algorithms for your need
I disagree - if you're picking up an algorithm, it would have its complexity worked out for you, you don't need to work it out yourself. Even then, the complexity is a really, really, really simplified version of the actual maths behind it, anyway, so you're only dealing with a single variable that just tells you approximately how bad the algorithm you have is. It's not that often you have to really ponder a choice between O(n[sup]2[/sup]) and O(log n), for example - it's usually more or less immediately obvious which one to pick. Sometimes down the line you realise the choice was wrong - sometimes it's because of change of the requirements, sometimes not. At any rate, in a decently designed system, it shouldn't matter that much - you just swap the algorithm. In a bad system...well, all the maths in the world wouldn't have saved you, really.

inu-kun said:
what is the best way to store a bunch of strings?
Write them to a text file? Throw them in a relational database? XOR them together? Let the compiler and garbage collector deal with them? I dunno - depends on your use case.
 

visiblenoise

New member
Jul 2, 2014
395
0
0
I think that if you can deal with computers and troubleshooting technology on a high level, you can certainly become a decent programmer if you don't hate it and have a bit of discipline to learn it.
 

Albino Boo

New member
Jun 14, 2010
4,667
0
0
Having the knack just means you get to the end point faster than someone who doesn't have it. Experience helps you get used to the seeing the structure and knowing the pitfalls. You won't make a career just based on pure programming, you will have learn at some point about project management, risk management and the ability manage people. Only the really talented can make real money programming, the rest of us just have to substitute breadth of knowledge for depth knowledge.
 

Joccaren

Elite Member
Mar 29, 2011
2,601
3
43
Wait, C++ is the most difficult language to learn?
Granted, it certainly isn't the easiest, but surely there are harder languages out there?

Anyway, on topic, these days; no, you don't need to have the knack for anything in order to do it. I can't draw for shit. I can't colour. I can't paint. Give me a course on how to do these things and 3 years to learn, I'd be competent and doing them.

You can learn anything these days. You can gain any skill. For some people it may take more work than others, but often those people are more successful - as they're willing to put in that extra work. What you've got to be sure of is that you want to put in that work though; if you want to just breeze through it, you can still learn it, but expect to struggle through [Even with the natural knack for it] and not have much come of it.

If you're willing to work hard though, you'll do it and be fine.

As for the math side of things... This is coming from engineering [Not software engineering], but programming math is fairly simple for the most part, and it is more logic than math a lot of the time. That said, get into splines and shit and it gets interesting, but I don't think you're likely to have to deal with that in a general programming course - I could be wrong though. Math though, like everything else, is a matter of being taught it. You can learn it, even if you struggle. Put the effort in, ask the teachers and tutors questions, and you'll manage. To be honest math wasn't my strongest subject after leaving primary school. I found it incredibly boring, and thus learned little to nothing of it for about 4 years and had to play catchup when it got to entrance exam time. Get into Uni, and I had little idea of what was going on with most of the Maths. I still averaged distinctions in my math subjects though. A bit of hard work goes a long way, and good tutors and lecturers can really make a difference in your ability to learn such things.

But, really, you'll be fine. People like you are the ones that normally are expected to do better than those with 'the knack', as the knack just makes you lazy. Courses in programming are, yes, partially to teach you the technical side of things - math, how to use each language - but a lot of it is also in teaching you how to think about programming problems. If you're finding you're having problems solving some really simple ones - that's normal. Everyone does. It takes experience. You get that experience from your course [To a small extent], and once you leave your course and begin working [To a much greater extent].

Overall, give it a go. You may struggle sometimes, but overall you're likely to manage.
 

Revnak_v1legacy

Fixed by "Monday"
Mar 28, 2010
1,979
0
0
It depends. Are you trying to get a degree in a competitive program? Then very. You will need to be very smart. I went to a state university and we lost 90% of our class size by junior year in our program. The odds are not in your favor.

That being said, I absolutely believe it is impossible to tell if you can be a good programmer until you try. There is absolutely no way of knowing you'll do well until you honestly push yourself to overcome real hurdles. Every person I worked with in class had been programming longer than me and had all the appearance of being better at programming than me, but none of them made it to junior year without flunking something. You just never know.
 

Creator002

New member
Aug 30, 2010
1,590
0
0
Programming? Your intelligence is kind of irrelevant. There's quite a bit of maths involved and even more if you're working with 3D environments, though in my experience, most of it is algebra,[footnote]int x = 5;
Now x has the value of 5[/footnote] but I've only done 2D programming. Having logic is a massive help though.
With engineering, I've no experience, so I can't say.
 

Jadak

New member
Nov 4, 2008
2,136
0
0
Web Developer here, primarily programming in PHP and JavaScript.

Short version, there's a lot of tiers involved. Yes, if you want to be "Software Engineer" and be an all around awesome programmer, you need to be fairly smart. The more advanced stuff you get into, the more that is true and the more advanced maths are likely to show up somewhere.

That said, while if you're actually stupid you should avoid programming, there is a wide range of applicable roles where logical thinking and good practices are more important than super smarts. I'm no genius either (also shit at math), and particularly in web development, much of my usefulness comes from familiarity with the languages, frameworks, and the ability to write reusable code that is good specifically because it doesn't take a degree to understand.

Point being, the ability to design and plan is just as (if not more) important to being a worthwhile programmer as fancy smarts. Not everyone has to be the guys who write the brain breaking fancy algorithms.

As for as red flags, hard to say, I tutored in College and everyone learns a bit differently, even struggling with things which should be easy isn't always an indicator, sometimes a topic just hasn't 'clicked' for a person and they'll be perfectly fine when it does.

My only advice would be to do code reviews with other people, or try to collaborate on simple projects with someone at at least a slightly better level than yourself. I'm not sure with who or how you'd go about setting that up, but that best way to gain feedback on your flaws and improve is from someone familiar with what you're doing and how you're doing it.
 

mmiki

New member
Mar 1, 2013
49
0
0
You don't really need a lot of math. I've been told many times in the course of my education that you do, but these days I'm certain it's a lie perpetuated by math teachers. ;)

As for the rest, you can become a competent programmer by working at it long and hard enough. It helps if you're able to learn fast, but if not, you will have to work harder than someone else for the same result.

In the end it comes down to be able to keep yourself motivated to learn and not get discouraged.