Can Anyone Become a Programmer?
another random user writes "A Q&A on Ars Technica asks about an old adage that many programmers stick to: 'It takes a certain type of mind to learn programming, and not everyone can do it.' Users at Stack Exchange are wading in with their answers, but what do Slashdot users think?"
I don't know where this self-importance stance comes from, but there really is nothing special in being a programmer. It doesn't really require much, nor does it require anything special. In fact it's probably the lowest of the low jobs related to IT. There is a reason why programmers are called code monkeys.
There might have been something about it when computers were so new and ancient that programming efficiently actually mattered. That was the age of John Romano and highly efficient code actually produced neat things. Now computers have developed into so powerful that such things just aren't required anymore.
What is the programmers job in reality? To put out code as fast as possible. It's often very boring, too. 99% of programming is just putting together function calls and libraries others have already coded. There hardly is any "challenge" as so many programmers on Slashdot like to put it. In reality it's boring as hell.
And you know what? Every programmer will get to the point where they don't want to programmers anymore. They start to see how monkey-like programming as a profession is. Then they want to be designers, those who actually need to think of the bigger picture than just putting together basic pieces of code in Visual Studio.
Programming itself doesn't require anything special. Designing does.
No
Some people do not have the logical thinking skills that are required to be a successful programmer.
If you are interested in things like girls and personal grooming, you probably don't have the right kind of mind for programming...
I've had this conversation in many different formats over the years, and I keep coming back to the peculiar nature of programming, or at least good programming. There is no doubt that technical background or training is highly desirable, but there is also an intuitive aspect that makes it more than just fitting blocks together. Given the right tools, I think anyone can code, but programming beyond basic HTML form processing or Excel macros takes something more.
The world's burning. Moped Jesus spotted on I50. Details at 11.
Programming (a.k.a. Coding) has many levels, but yes, most people are able to handle the logic necessary and can acquire the skills in time.
Development is another level which many programmers either don't attain or are not willing to go to, but it is a step that makes a big difference in the code produced.
Unfortunately, the terms seem to be used interchangeably, thus diluting the developer's value and putting expectations on programmers that they cannot live up to.
If you don't enjoy something, then usually you don't have motivation to learn and perfect the art. Perhaps anyone can be a satisfactory opera singer with enough training, but that doesn't mean they WANT to be an opera singer.
It's also true some pick up on programming and learning new languages faster. While anybody can probably learn with enough practice, it may not make economic sense to you and the company to take a long time to get into the flow of things. Possible, yes. Practical, no.
Table-ized A.I.
the only answers you will find in this thread will answer a different question:
"what prejudicial preconceptions of yours about the field of programming tweaks your ego?"
intellectual property law is philosophically incoherent. it is your moral duty to ignore it or sabotage it
Not everyone can do X, but a person who can do X amazingly well can come from anywhere. i.e. you don't have to go through a particular training to be good at X. nor is going through some training guaranteed make you good at X.
I've never had much aptitude for programming. The "programming" (code editing) I do is pretty chunky. I can look at a block of code, go find another example, somewhat understand what THAT block of code is doing and perhaps with a bit of trial and error, come up with the right thing to do. I don't understand the fundamentals. I remember being exposed to programming in earlier years and I just didn't get it. I didn't foresee myself needing it. Maybe if I'd have paid more attention to the preliminary exercises... I don't know, it just seemed pointless because it didn't make sense to me.
So basically, without examples, I'm fucked.
turning one set of instructions into other set, yes anyone who couldn't be trained for(who wasn't protesting the process) it would probably officially qualify as retarded in some legal fashion and qualify for social security upkeep.
however I'm not so sure that "anyone" can churn out code just for the sake of it - or be able to turn vague phrases into something that's a real program that does something meaningful, that's the really hard part of the art of it anyhow, figuring out what the fuck the thing is supposed to do(that's sw r&d for you I suppose).
world was created 5 seconds before this post as it is.
Being into computers since 1990, I had thought coding may be a career. In 1999, my first shot at college, and coding, I came to see it was not for me.
I aced the C Programming course, but it wasn't the technicalities of the language that repelled me... it was the environment.
I realized a day's work of coding meant sitting in one spot, staring at chars/text, thinking, and then more of the same. Even the 2-3 hours of coding "lab" was absurd, to me. I was NOT ok with this style of work.
I realized the CS path was clearly for someone else and moved on.
Less than half the kids in high school can grasp algebra 1. There is nothing you can do to make them "get it" - their brain either works that way, or it doesn't. Algebra, Geometry, and Programming seem self-evident to me. On the other hand, I can't draw, and dropped out of English 101 on six separate occasions. Metaphors, similes and analyzing literature are just a ridiculous to me - that stuff makes no sense at all.
I think a distinction should be made between a programmer and a *good* programmer. My CS program had a number of *really* smart kids - 1600 SAT scores and the like - but many of them really struggled at the concepts and barely made it through the curriculum. I think a good programmer takes 1. Creativity to think about problems from different angles 2. Drive to hunker down and get through hard problems (be it starting a new language, that pesky compile error, starting a large project from scratch). 3. I'm sure fellow slashdotters can think of many more
In my experience over the last 10 years in a military programming shop, it does take a different mindset to be a good programmer. We have had several programmers that just didn't have what it takes to learn even the basics of programming. That doesn't mean they were dumb, in fact some were very smart and motivated. They just that they couldn't comprehend the concepts and reapply them to changing circumstances. Out of the 20-30 programmers over the years only 2-3 were actually good at programming and 3-4 were not able to function as programmers since they couldn't grasp the concepts. The others might have been classified as 'OK'. BTW the good ones were the enlisted programmers off the street, not the ones with degrees.
I pay you enough money you will be motivated to get good at it. The question is how naturally will it come to you. The followup is how good you will get.
Those that it comes to naturally will need less money and will be better at it for that money. So your priced out of the market unless you have a natural interest and aptitude for it.
The vast majority of programmers start out as science types that have to learn programming out of necessity since can't afford to hire anyone else and they need their work done right. They are already procedure and process minded.
Yes, but that's nothing to do with intelligence.
Not that I'm in a position to criticize. Self-taught. Ignorant of many useful data structures and algorithms. I squeak by on clarity, organization, simplicity and extreme usability, but I could stand a lot more basic CS (and the time to study it).
Please do not read this sig. Thank you.
Anyone can become a programmer, just like anyone can become a painter.
It does not mean that the person would be a good programmer though. I could be an artists, but I would not be a good painter if my life dependent on it.
Not exactly answering the question, but just moving it back a little: folks who know algebra seem to be able to grasp the basic concepts. People who don't will usually just struggle. Another one besides algebra, but closely related, is Excel. If folks can't grasp the basics of formulas/functions in excel, then coding will most likely be beyond their grasp. (this is from ~10 years experience teaching adults the basics of writing code). Can all people get to the point of being proficient in Algebra and therefore code? Perhaps... But since 100% of the general population definitely does not know the basic concepts of algebra, I'd have to say that at this point, not all people will be able to learn to code.
Yay! I'm a programmer!
(It's getting tiresome posting this same comment again.)
Implicit in the question is the idea the programing is programing is programing.
I don't think this is case. I would say just about anyone, baring those individuals with some moderate to severe mental impairment can do some programing. Integration programing is usually nothing more than outlining the corrected steps and gluing that outline onto the required boiler plate. Application programing might get a bit more complex but even that should be attainable for anyone able to read and follow documentation.
Oh sure it can get very complicated when you get into ETL on big data sets and such certainly may require a specialist who makes it business to do it well but I do think its something *anyone* could learn. In the same way anyone can learn to be an accountant or an attorney. Getting past some of the hurdles can be tough but with enough time and resources most normally abled people should be able to get there.
When you get into lower level stuff its a different game. I am not so sure just anyone could be taught compiler design for example at least with the outcome they will be proficient and successful working in the field. As you move from programing for high level applications into programing for 'Computer Science', 'Computer Engineering' or 'Systems Programing' than there is a certain group that is able to follow the math, and think about problems with and without abstractions at the same time and other things not everyone has a facility for.
Repeal the 17th Amendment TODAY! Also Please Read http://www.gnu.org/philosophy/right-to-read.html
Not everyone does think logically! We all can think of things we experience every day that were NOT logically designed or planned!!! ;^)
Anyone can learn a language and write some simple small programs, (many times badly, even by those WITH a CS degree!) but There is a lot more to programming than just learning the syntax. I myself am self-taught for the most part, but there is a lot missing that would make me much better had I obtained a CS degree.
Michael Bloomberg, Mayor of NYC is supposedly learning to program. I would be curious to evaluate his programs, whatever language he has chosen! ;^)
It took a different mindset to program in Fortran, C, Assembly and that age of programming. Accessing memory in a way to accomplish the task when there was very little memory (4-128k), and still provide UI was not for the feign of heart. Now we have OOPs programming, built with GUI programming environment using calls to the OS. Much simpler, but still requires a logical mindset. IMHO, just about anyone can do some programming these days.
Well, you hit the nail of the problem right on the head. We have met the enemy, and it is you and people like you. The fact that you make this statement shows that you are one of the 80+ percent in the industry that don't belong who are destroying the software ecosystem and making garbage software the norm.
You should have just put an end to your post after the first question, since you clearly don't know the answer.
And there it is. The winning answer in this round of Final Stupidity. The fact that you don't think that designing everything from internal data structures to quality unit tests for your code shows how much you truly have no idea what you are talking about. Abraham Lincoln could have told you that tis' better to remain silent and be thought a fool than to speak and remove all doubt.
Guns don't kill people; Physics kills people! - John Lithgow as Dick Solomon on Third Rock From The Sun
I've interviewed a lot of people for the position of senior engineer. This has taught me that most experienced programmers can't program. Most have trouble writing the simplest of code snippets despite claiming a decade or more of experience.
Given that, I'd say that anyone can become a senior engineer, but few people can learn to program even when given a decade of on the job experience.
Cow Cube
Not for the obvious implications. Personally I have a lot to do with computers. I am a network engineer, I understand fundamentally how programs work (and have even written my own bash scripts on many occasions) and even have a broad understanding of how a kernel works.
However I really don't care for writing code. I've tried on many occasions to learn GNU C, C++, and C#, wrote some basic programs that do little things, even tried writing an android app, but just couldn't get into it. Maybe there's another programming language out there for me, or perhaps a better way to learn the languages without getting bored with it (books really don't work for me) but I just haven't found it yet.
But I think the more realistic thing is that I am just not interested at some deeper level, even though I would like to learn it. I've actually been involved in an open source project where I was sort of a tester, and the coders implemented some of my ideas (which I conjectured at the low level side of things) that turned out to be a successful addition to the project.
Careful with names containing L slashdot.org/~AiphaWolf_HK slashdot.org/~AlphaWoif_HK slashdot.org/~AiphaWoif_HK
With simplified programming languages like Java, that take care of the "hard stuff", anyone can string together some code and do tasks.
And anyone can also make a hell of a mess.
10 PRINT "EGSonikku is a PROGRAMMER!"
20 END
- "Scientia non habet inimicum nisp ignorantem"
But not everyone is going to be a good programmer. I think the 80/20 rule applies here too. 80% of programmers can program, 20% can do it efficiently.
I see examples of bad programming all the time (or you can just read thedailywtf.com) and currently it doesn't matter all that much whether you spend 100,000 extra cycles in a loop. But we're heading once again to a level where efficient programming is going to become more important (low-end, cheap devices like Arduino and Raspberry for the consumer-end and high-end multi-processor systems like GPGPU and shared clusters on a pay-per-cycle on the other end).
In a GPGPU scientific environment (where I work) shaving 10ms off a single looped calculation can easily end up giving you a result 7 days faster. Finding out that a buffer gets flushed every 64-bytes or every 100 microseconds and understanding why filling up a buffer with 0's (and how to do it efficiently) is faster than waiting for a timer to expire is real programmer's work but none of the documentation or even advanced classes on the subjects don't explain such things.
Custom electronics and digital signage for your business: www.evcircuits.com
Short answer is: yes, in theory; in practice, though, actual results will vary. My observation is that the same is true with programming. Some people are natural talented, some people have good workman-like (workperson-like?) performance, some are pretty wretched no matter how much experience they may actually have, and some just can't grasp the basic concepts enough to really do anything. Note that I've taught computer science on a university level, and I've built software development teams from scratch, so this is based on direct personal observation. ..bruce..
Bruce F. Webster (brucefwebster.com)
There are people that will never be able to become programmers, as people that will never be able to become artists (many of them programmers).
I like to think I'm a more-than-competent SQL programmer, and I don't hurt myself too badly at Web and Windows Forms programming.
I work with somebody who does some great stuff in C# who can't warp his head 'round set theory and therefore has real problems with SQL.
I know somebody else who's a real monster with Cisco stuff (a Cisco employee with certifications coming out his ears), and I'd argue that creating networking and firewall rulesets is every bit a form of programming as anything I do...but he'd need some serious handholding just to do a "Hello World" program in Visual Studio.
I know another guy who can make COBOL sing and is not bad at SQL (though he prefers to write his SQL with more procedural code and less set theory than is good), but he wouldn't have much luck doing more than tweaking a Web form.
We're all programmers, all of us good at what we do, some of us great at what we do...and, yet, making any one of us look like rank amateurs at huge swaths of basic programming tasks wouldn't be hard at all.
Could we become good programmers outside our areas of expertise? Probably. But it took me quite a while to figure out how to truly think in set theory, and I'm not sure I'm capable of more than a handful such masteries in any given field in my lifetime.
Cheers,
b&
All but God can prove this sentence true.
Can all programmers raise milk cattle, teach elementary students, properly certify the general medical needs of a patient, manage a retail store, sell commercial real estate, design and print professional-grade advertisements, safely drive an 18-wheeler truck, AND captain a fishing boat?
Not everything in the world requires implementing algorithms in computer languages nor benefits from being automated. The human world is much larger than any one of it's professional disciplines (obviously), and the human world is tiny in comparison to the world that encompasses it and the universe even more.
PS: I don't reply to ACs.
It takes a certain minimum set of cognitive skills to get to the point where you can be moderately successful in the software industry. IMO it takes a special person to write what I would consider "really good code". I'm skeptical that this can be taught. I'd add that most software developers, including many who enjoy long and reasonably successful careers in the field, don't fall into this category.
Anybody can learn the basics of all domain (except obvious physical impairment). Everybody can learn how to draw, everybody can learn how to dance, everybody can learn how to speak an other language, everybody can learn maths, everybody can learn how to program. The amount of time required to learn depends on motivation and natural skills.
Not everybody can become exceptional in a particular field. But everything can be taught at a college level to anybody.
Being a programmer, at the lowest level, is composing instructions. Lots of people do that, and they do so without too much trouble.
Now, being a good programmer requires being able to manipulate and keep track of simultaneous abstractions. That's a lot harder, and I do think there are plenty of people who just don't work well that way.
Blogging because I can...
Dummies guide to C
Dummies guide to C++
Dummies guide to Visual Basic
Dummies guide to java
and on and on and on and on...
any dummy can learn with those :P
In fact, mathematicians can be the worst: they think computer science is a subset of math and it really isn't.
Totally wrong. Computer science is *ALL* mathematics. It's programming that isn't maths, for the most part.
Based on my experience as a professional software developer dealing with many other programmers, I have to say yes! Anyone can become a programmer. You don't even have to learn how to program!
I am from the thought that it is purely genetic. Sure you cant teach someone the concepts applying those is where genetics come to play. It takes someone with abstract visualization, tinkering and creativity skills . Throw in some unsatisfiable desire to beat a machine into submission and you have a great programmer.
Interestingly enough over the years I have run into a unusually high percentage of great unix programmers that where previously auto mechanics.
Got Code?
I think software development, apart from the most basic programming, is an inherent trait that cannot be learned -- much the same as playing an instrument. I played in a school orchestra and one of the other musicians played the French horn. He could get the basic tones out but had no sense of beat and could not play syncopes or counterpoint, no matter how much we helped him.
Programming is a mix of skills ranging from "language" skills, where the programmer needs to understand:
- The syntax of the programming language
- The semantics of the programming language
The programmer also needs to know how to "interface" and thus understand:
- The interaction with the OS
- The interaction with storage systems
- The interaction with networking systems
- The interaction with the presentation layer (this includes communicating with the user)
- The limitations of each subsystem
And lastly the programmer has to solve the problem and therefore needs to understand:
- The problem
- The solution
- The different ways of achieving the solution and select the best in the circumstances
- What can go wrong at every step and catch each possible error in a meaningful way that does not break the functionality
On top of this, any seasoned programmer knows a number of "tricks", methods and algorithms, and can select the best for the current job. The list is probably not even complete, but the best I could do at short notice.
Many of the above skills can be learned, but some are just beyond many, if not most, people like understanding the semantics of the programming language (Perl is notorious in this respect) and the intricacies of the interaction with the subsystems (like how a program can fail miserably when ported from *NIX-type systems where filenames are case sensitive to Windows where they are not), to name two. And coming up with a solution to even simple problems is impossible for many -- believe me, I have seen quite a few failing. What can go wrong and how to catch it is a challenge for even the most seasoned programmer -- it is near-impossible to learn this if you do not have the "gift".
Computer science is, practically by definition, a subset of math. But there are many branches of mathematics out there, and being great at one doesn't necessarily mean a person is great at all of them.
Also, just because someone happens to be a great computer scientist doesn't mean they must also be a great programmer.
Happy people make bad consumers.
If you give a kid a Logo turtle and tell him to turn right and left and forward, he'll be programming within a day.
From there of course there are a lot of other skills you need to learn to become a professional developer, and a lot more to actually be good at development, but if you keep at it, you'll get it.
"First they came for the slanderers and i said nothing."
Anyone can sing. Many are bad. Some are good. A handful blow you away and send your soul into the stratosphere.
For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
Anyone can learn to program, just like anyone can learn to build a house or drive a car or bake a cake. But not everyone can learn to do these things well. The lower an industry's barrier-to-entry, the more crap people one will find working in it. Just look at the software business.
Anyone can learn to program. But not everyone may enjoy programming - or programming well. I enjoy writing short stories - I'm not so much a fan of going over them again and again to edit them. Programming can be the same way, but my IDE helps me edit. ;) I am mostly a "right brained" person; but, I enjoy programming - as it involves solving problems. But I'm more of a hacker than programmer.
I think though, an important thing to note is that Programming is a tool that many different minds and personalities will use in the years to come. When I first showed an interest in programming, I was told that I would not do well in this field, because I was not "good at math".
That was an opinion given to me by people, who I can say now, had no idea what they were talking about. (Some of these same people also said that I needed to learn Cobol before C++ -- I chose to never learn Cobol - and it has never hindered me.)
If there is any one thing that will be of huge value to someone interested in Programming, it would be Logic. But, I can even think of an exception to that. Programming in ProLog in a very real way handles most of the logic for you, so in the end you only have to describe relationships and rules. But I digress.
In short, the question Can anyone become a programmer? must be qualified OR answered quickly and simply: YES.
If deciding to qualify the question, consider the following:
If you are seeking to program Artificial Intelligence - then you should probably be someone who enjoys exploring the mind, such as a Psychologist. If you are going to be programming something that requires huge amounts of physics calculations - then you probably should be good at math. If you are focussing on Natural Language Processing (a field within AI) - then you probably should be a linguist.
Beyond that though, there are some basic skills that would seem to usually be required or at least helpful.
I think a Programmer needs an ability to have an attention to detail. I think having skills at recognizing patterns can be helpful. I think understanding (really groking) Logic is usually helpful. But - I believe anyone can build those skills, and should. I don't see the continued benefit of keeping programming out of the hands of the Information Owners. Let each man (and woman) crunch their own data until their heart's content!
Many people, imho, have an unrealistic fear of programming. With higher level languages like Ruby and MacRuby - I hope more people take up the challenge to codify solutions to their problems. The Information Owners of the world should at least be able to code a proof of concept or get something working before bringing in expert Keyboard Cowboys to refactor and tune.
Today - I think "refactoring" is the task that many people won't be able to do or want to do. I suppose some might say, "Well that is what we mean by becoming a 'Programmer'"; but, I think anyone who writes code that executes as intended is a 'Programmer' - and a decent one at that. And anyone who writes code that doesn't execute as intended is a "Windows Programmer" - (j/k I grew up running away from broken Windoze). HHoS.
The "refactoring" task would be the task that might require a "special kind of person". That task where you need to reduce the amount of memory being used or increase the speed of the program by optimizing the code beyond what any computer compiler might do, for example. But - ugly, sloppy, uncommented, spaghetti code that no one in their right mind would ever want to maintain may be all you will ever need. Such code often works fine for the programmer's purposes. In today's world of ever increasing RAM and hard disk sizes, there is room for less than elegant code. Today, every line of code doesn't need to be a terse zen koan to be useful. Therefore, we can all be Programmers, if we will it.
Years ago an accountant told me she would love to learn to program; yet then she showed me some awesome macros that she had done running past 1000 lines each. I could have come up with a zillion criticisms from code repeating, bad variable names, weird formatting, variable scoping, etc. But her code did amazing things and did them well. She had all kinds of edge cases handled well and so on.
On the other hand I have seen CS grads with perfectly formatted code with all the comments, variable names, OOP, etc perfectly to school standards that was all crap in actual use. I could edge case them to death. A simple way to break their code was to do something radical like use a foréign character. Often the difference between a bad programmer and a great programmer is the size of their code. A bad programmer will use 6 classes and 900 lines of code, a pretend good programmer will half that while making it more complicated, and a great programmer will use zero classes and 20 lines of code; and those 20 lines of code will be simplicity incarnate and if they ever need any maintenance any fool could do it.
I have found the great programmers usually stick out early. It is not often something that comes after years of programming they just become more great with time. Although the better programmers weed out their bad practices and add new good ones the worst programmers are often very reluctant to change, "Unit testing will just slow us down."
What makes me laugh though is when the worst programmers do finally adopt something new and good they usually adopt it in the worst way. So they will adopt test driven development during a prototyping or R&D phase when everything is in massive flux and just needs to be proof of concept not flawless.
So I would say anyone can become a bad programmer and with the correct mentoring most can become an adequate programmers but that only those with the right intelligence and mindset can become great programmers.
I believe everyone can code, but obviously some people are going to be intrinsically better at it.
A few weeks ago, in less than half an hour, I taught about 20 2nd grade kids (generally 7-8 years old) how to count in binary as well as add any length of binary number.
Wondering whether I could beat that, I repeated the feat last week by teaching about 20 1st grade kids (6-7 years old) exactly the same thing. The 1st graders had more trouble keeping their attention than the 2nd graders, but they were all the more enthusiastic to learn.
In case you're wondering how to teach kids of an arbitrarily young age how to learn binary, here was how I did it in three rounds of kids raising their hands to answer my questions:
1. Raise your hand if you like to play video games.
2. How many of you would like to make a video game?
3. Who would like to know the three secrets to making a great video game?
By the third question, I think I could have staged a coup with the eager little mobs.
I've got my eyes on a local pre-school next.
That came out wrong.
PS. Teaching kids how to count and do math in binary is way, way easier than teaching them how to do it in decimal. It should come first IMHO.
Yes, programming, as with virtually all other skills (except perhaps dunking a basketball), can be learned and developed through practice. The 'old adage' should be changed to 'It takes a certain type of mind to ENJOY programming'
Indeed, I had several professors who were great at theory but lousy at programming - one of them was a former grad student of Dijkstra, and he was the worst (although to arrogant to realize it).
Your mom lets you throw parties in her basement?!?
Just jerking your chain . . .
Anyone can become a programmer at some level. Simple programming is like coming up with a recipe for a meal - you have some ingredients and combine these to create a hopefully desirable outcome. It's skill, but it can be learned. I mean, I was able to move the turtle using LOGO when I was .. 10? 11?
It does however take both experience and raw intelligence to become a really good programmer. Fully understanding trade-offs takes experience. If you go all-out on even small scripts, you'll waste time. If you just hack away at large projects without design and methodology, your lack of a coherent design will bite you in the gonads. Learning how to communicate effectively with end-users and non-technical team members is also something that takes practice and a certain mind-set. I've seen many, many bad solutions chosen by bright people. I've done some myself, also recently. And I'll make some more mistakes in the future. Why? Because communication is hard. Also for the other party.
Stop the brainwash
But, sadly, it appears that the answer is 'Yes'.
Have gnu, will travel.
I'm of the opinion that we do a poor job of teaching math and programming. We could do much better, without extreme measures.
Why is it so poorly taught? Setting aside such issues as politics, bad teachers, bad students, bad home environments, distractions and the like, it comes down to the way the material is presented. We bog down in trivia, such as derivatives and integrals of common formulas. What is the derivative of y = log x? Of y = sin x? y = x^3+2x^2-5x+1? Why should we care about those problems? Rote memorization and practice is of little value to the students who never understood what they are practicing. We bury students with tedium, hoping that if only they do enough math problems, grind through enough meaningless made up formulas designed to force a student to use the product rule, the substitution rule, or a Laplace or Fourier transform, or any of the dozens of other techniques, a light will magically switch on and they'll suddenly get it. Even for the brighter students, this doesn't work well. Where and how can calculus be applied? This question was never explored. The closest we got to it were the dreaded "word problems", which students were anxious to avoid, and teachers were all too willing to skip.
Programming is much the same. Students are drilled on keywords, syntax, data structures, library functions, and similar trivia. People can memorize all that stuff, and yet be utterly incapable of writing a program.
In a beginning programming class, a struggling student demanded a process he could follow in order to write a program. Upon reflection, I thought it an interesting question. How to answer it? Throw Agile Programming at him? But that wasn't really what he was asking. Try an OOP approach of creating a description in English, then pulling nouns out of that for class names, and verbs for member functions? Closer, but not good enough for him. He wanted low level guidance, so he would know when to make a new variable or new function, write a loop, test a condition, and that sort of thing. So, try to explain he's asking a circular question, if it is indeed circular? Or that if there was such a process, we could program a computer to do it for us and then there'd be no need for human programmers? Explain that design is hard, as one must be able to perceive the problems correctly, then devise plans and methods for solving them, and that there are many ways to do this and often the choice of which way to go is seldom clear, and no simple set of rules can do a good job of pointing out a good way?
Yet we could do better. I have a question that most people miss. Of anyone who knows, or thinks they know, what Structured Programming is, I ask: Give an example of a program structure. It's not really a hard question, but an entire class of Computer Science seniors (at, admittedly, a 2nd rate school), was stumped, and needed a number of hints in the form of related questions before they at last got it.
Intellectual Property is a monopolistic, selfish, and defective concept. It is "tyranny over the mind of man"
If Michelangelo would have used a roller, he could have finished in two weeks (IOW, read the requirements).
Have gnu, will travel.
Lots of folks have strong logical thinking skills. Philosophers. Mathematicians. Lawyers. If logical thinking skills made a successful programmer these folks would be consistently good at it. They're usually not. In fact, mathematicians can be the worst: they think computer science is a subset of math and it really isn't.
Actually, you're technically incorrect on that last point. Anything that you can mathematically demonstrate can be calculated and vice versa. Not that knowing this is of much use in everyday coding of the type you do when you're maintaining a big ball of mud, but hey.
Also fwiw, and in my experience anyway, mathematicians are supremely better coders than CS guys: they abstract more, better, and faster, leading to fewer lines, fewer bugs, fewer edge cases left out, better tests, etc. (Your mileage may evidently vary, since everyone and his dog graduates nowadays.)
no - as anyone cannot become poet.
Manufacturing the Oldowan tool set was not for anyone either back in 2.6ma... The rest is history
True, but I'm sure you'll agree a lot of those people are already "professional" programmers anyway.
...but it won't make them talk like a human. Being a good programmer in my experience requires you to articulate the logic that's implicit. Once I thought the tedium and attention to explain in excruciating detail what to do was sufficient, it's necessary but not enough. Implicitly you're doing a lot of other things that aren't in the recipe like checking if any of the ingredients are past their due date, spoiled, sour or moldy. You check that all your utensils are clean and in working order, you clean out the oven if it's already occupied, if that bag of sugar is leaking you have an error handler for that, you do a zillion things that aren't in your recipe no matter how detailed you make it. The computer does absolutely none of these checks unless you tell it to.
If you find really sloppy code where there's only one working code path, it's the main path where everything goes as expected. The slightest deviation from that, and the code goes boom. Good code is one that actually handles all these sorts of odd conditions or at least fails gracefully. But you can't write that kind of code unless you can "introspect" yourself and realize all those implicit assumptions you make. In my impression, very few people are able to do that - sure if you point out a way their code crashes they can put a band-aid on it but either you have the knack for writing that code on your own or you don't.
Live today, because you never know what tomorrow brings
But only a hand full that can. And when I say a lot, I mean hundreds of people I've witnessed who want to. Maybe the ones who want to category is the cause for this article? Dream on... and then we're seen as arrogant. It's not my fault you can't do it. Parle vious France? I didn't think so.
It doesn't take a lot of skill to click buttons. But seriously, almost anyone can do basic programming (hello world, calculators, make some sort of output etc.) but it's when you start to get into things like Objects, Design Patterns, Constructors/Destructors, and Pointers where you have to start exercising your logical thinking and just be able to understand it if you want to get to the next level. The reality is that not everyone is cut out to be a manager, or a labourer, or a foreman, or an engineer, or a programmer. You can train hard and become decent or even good but I truly believe there is some inherent skill and brain function/thought process that you need to become great at whatever it is we're talking about. Except Liberal Arts, it doesn't take much skill to flip burgers/start a deep fryer or make coffee. Hell you could probably learn how to do latte art over a weekend and make cool fractal or mathematical latte art.
When is someone a programmer? I wrote my first programs on a calculator. They were more like macros actually. Was I a programmer? Of course not. Then I wrote my first BASIC program on an Apple ][ of a friend at highschool. Was I a programmer? Not really. Then I saved up all my money and got myself a C64 and wrote programs in BASIC, then 6510 assembly. Was I a programmer? Well, perhaps, but only 15, so what did I know? A couple of years later I bought myself an Amiga 500. Wrote some stuff in 68000 assembly. When studying computer science, I learned a lot of useless program languages, but also C. Wrote lots of programs in C. Then I started a small company, hired an office space where 10Mb ethernet sockets from the wall connected directly to the net for a low fee, built and hosted web sites on a Intel 80486 running Linux. This was 1995. When I got my first job at an internationally operating start-up, I was busy configuring servers running NT, load balancers, firewalls but also did some SQL and coded some Cold Fusion for the company web site. My old trusty 486 served as DNS server. Was I a programmer? Nah, I did not really consider myself one.
The start-up went nowhere and I moved on. I did, and still do, enjoy programming tremendously. I sometimes still do it in my free time as a hobby. So I got a new job and with this job I could program all day. I made long hours that did not feel like long days at all as I was doing some very nice things, or at least that's what I thought. I was making enhancements to core parts of the software, and even got multithreading working for them, something that they were not able to because of compiler bugs, which I also helped finding. I was refactoring their code at high speed, because there was a lot of room for improvement, to say it politely. I often stared with disbelief and some amusement at the nonsensical functional designs handed to me. But worse, I started to clash with their main programmer, who had been there for a long time, and did not like what he saw. Our manager did not extend my contract after a year. He did not like it either. I was using object oriented techniques which they were not used to, it was a "different paradigm" for them, as the manager put it.
This was a disillusion. Programmers at the time were hard to find, and I could not believe that this was happening to me. Was this manager clueless? Probably. Was their main programmer pulling my leg? Perhaps. But I was sure I had done some very valuable things for them and as a reward, I was thrown out. Apparantly, I had been unable to demonstrate my abilities sufficiently. That might have been either my or their shortcoming, but for me that did not matter. I decided to abandon programming, or rather, developing. I felt developing did not receive the respect it deserved. It was often looked down upon by management and being outsourced to India. I decided to become a business analyst.
Life as a business analyst was a walk in the park compared to programming. I could now make designs on a higher level, but with my technical background, also talk to the guys that were going to implement it. I would never hand over a design that the developers would be unable to build. Also, the deadlines where less pressing. In the cycle design-develop-test-release, the time pressure existed mainly in develop and test. The testers would be the ones making extra hours when a release deadline was to be met.
I had been a business analyst for a couple of years at several banks. They have large systems and a high rate of IT staff turnover. Generally at banks, knowledge it sparse, documentation often non-existent, and management not competent on a technical level. They do have enough money though so they just bring in loads of consultants. So being a consultant I benefitted handsomely financially as well. My days as a programmer that got no love were soon forgotten by just looking at my bank account every now and then. I worked happily with the Indian vendor (Infosys) who created just horrible code, but ultimat
My karma ran over your dogma
It is true in a special kind of way...
Excuse me, but please get off my Pennisetum Clandestinum, eh!
Dr. Carol Dweck spent much of her career answering the question "Why do some kids seem to excel at school, and others seem to struggle?" Using various controls she developed her somewhat famous "Mindset Theory".
At a fairly early age we all start bifurcating into either "fixed mindsets" or "growth mindsets" about various things in life (sports, academics, musical prowess, etc.) That is to say, we frame the world up into a set of interrelated closely held beliefs that subconsiously tell us either: everyone is essentially born a certain way and can only change a little around the edges, or anyone can be anything with perseverance and the truth. The more you practice behaviors related to one or the other of these mindsets, the more it reenforces your beliefs, until eventually it becomes a core part of your personality and becomes difficult to change.
People who say "it takes a certain kind of person to be a __________" are either revealing that they have a fixed mindset about ___________, or they're just stating something like: "in practical terms" some people grow faster than others when learning ___________.
Of course, neither fixed nor growth mindsets are good or bad per se, but they do produce certain predictable results. A fixed mindset toward a domain ("I'm not good at math."), will produce plateaued and unchanging ability in that domain. A growth mindset toward a domain ("I'm not good at math right now, but I can be if I choose to pursue it"), will produce continued growth so long as the learner remains interested in the domain, and finds someone who is good at the subject and is truthful with the student on his/her progress.
As a self-taught programmer and software engineer with 30+ years of experience in the design and development of everything from double-entry accounting systems to real-time embedded systems, to large-scale high-availability distributed systems (a field I have now been working in for almost 20 years), I have been able to observe the thinking processes of many other programmers - both those who were good, and those who were abysmal at the job. The best like to play, experiment, observe, and share. They are also likely to have a very good grasp of formal logic (intuitively, if not by dint of training), and have without exception pronounced pattern-recognition skills. When asked what I think is the one skill I have that best serves me in my career as a software engineer/programmer (I am Senior Systems Engineer/Programmer for a tier-one mobile phone manufacturer), I say that there are two - logic and pattern-recognition. I think the pattern recognition skills come from my study of music and languages, and my logic skills I attribute to the required philosophy course I took in engineering school - formal logic, as well as rigorous sections on logic I had in maths class during my year in England when I was 15.
Of course it takes a certain kind of person. Doesn't evening?
For example, I can't teach anything to anyone. I can't even teach my cousin to use my alarm system, so it's just easier to not arm the system when he's around. The skill that I lack is to serialize information in a manner able to be conveyed to another human being.
The reason I lack that particular skill is because I'm always in programming mode. And in my programming, it's about "layered truth statements". It turns out that layered truth statements aren't easy to communicate in english -- in part because english announces such ambiguity in any given sentence that truth statements often fail outright.
Since most programming is done in with positive truths, (SQL especially comes to mind), to be a programmer one must fluidly drop english from their mind. Anyone who can't do so (the way I can't teach) will forever struggle.
No.
Just about anyone can use a typewriter, not just anyone can write a best-selling novel.
Just about anyone can hold a box and press a button, not just anyone can make gallery-quality photos.
Just about anyone can stroke a brush on canvas, not just anyone can create a masterpiece.
Just about anyone whack a stick on drum skin, not just anyone can do it rhythmically and cohesively.
Just about anyone drive a car, not just anyone can become an F1 champion.
I could do this all day, but I think I've made by point.
A better way to say it is that "some people innately have an easier time programming." That is true. Part is learned skill, part is how the person's mind works. It takes all types for many different things to make the world go round. Oh, wait, that's momentum. :)
"Can Anyone Become a Programmer?"
No.
But anyone can become a coder.
Let me clean that up for you. In my book, coder is someone who knows at least a language and can write some code which can do something on a computer, while - building on that - a programmer is someone who has knowledge of algorithms, methods, methodologies, architectures, and doesn't just write some code, but understands and knows how and why to write that code.
Of course that's just my take, but it comes from experience.
I am putting myself to the fullest possible use, which is all I can think that any conscious entity can ever hope to do.
I would have to disagree. Programming isn't algebra, it is metaphor. It is building machines out of words. In fact, I don't know if you meant it humorously, but you yourself say "define the WORD algorithm". I'd argue that most algorithms CAN be described in words. Often even English or Swahili words.
I'm not sure, but I think that's why they call the medium a "programming language". It isn't devoid of math or logic -- far from it -- but it isn't the same thing, either, and a person good at real mathematics can easily suck at programming or vice versa.
Here's a program:
"Take an integer variable named i, fill it sequentially with the integer values from one to one hundred in steps of one, and print out its value on the screen I'm looking at".
This is perfectly understandable English, and can be executed by a reasonably bright student to whom the words are directed where the screen is a whiteboard.
It isn't really any different when written "for (i=1;i <=100;i++) printf("%d\n",i);" or any of the myriad other ways of writing the same program in different programming languages. A machine built out of words/symbols that have a fairly carefully specified operational meaning. Not at all like proving that the angles in a plane triangle add up to pi.
rgb
Even when the experts all agree, they may well be mistaken. --- Bertrand Russell.
Anyone can programm if he has a healthy brain. And given enough time and programming problems anyone will discover his or her own version of functional programming, object orientation and all the other basic programming paradigms others have discovered too. For instance, most of us have discovered their version of OOP some time in their programming career all on their own.
Wether you'll have the mindset to work yourself into existing established insanities such as the C group of languages or Java or into huge libraries and complex existing systems and software kits and run into design patterns is a different story. As is if you are willing to slog through the existing insane historically grown chaos of our system stacks we have to handle today. That is what you'll have to do to get *paid* to program.
Those things aside, programming is more or less the same as disciplined thinking, and every healthy grown-up should be capable of that.
The truth is: For everyone who says you have to have a certain mind to programm, I can find a programming language that is turing complete, introduces innovative concepts that this person doesn't know to well and will be a huge pain for said person to programm in. Take an elitist ruby fanboy and he'll probably start crying and doubting himself (and the entire world :-) ) if you show him Lisp - for instance.
So one shouldn't be to distracted by enthusiasts who claim programming is an arcane art for a selected few.
Programming as a pastime is actually quite easy and fun. As are most things.
It's the hard dirty work that professionaly get paid to do. That goes for every learned profession basically.
My 2 cents.
We suffer more in our imagination than in reality. - Seneca
I've been programming on ond off since 1975 and I came to realize that it was the problem solving that I liked. I think some one stated explicitly that programming was problem solving in the blog "Coding Horror" recently. Of course to be good at problem solving takes practice. After a while one remembers a similar problem that one solved. (That's a lot like math.) Perhaps some version of that technique might be suitable or one realizes that the first technique could have been better and the improvement could be used for the current problem. An inquisitive mindset and the ability to reduce the problem to its essentials helps, too.
It helps to know one's tools well, too. I've heard a musician say that they could finally make good music when their instrument no longer came between them and their music and I think it's the same for programming. When use of the languages and IDE are second nature one can concentrate on the problem solving. I've never worked in a shop where someone handing me detailed design, though. My work assignments have been some thing like: "This is the input and we need these features". Or "this is the output we need (to feed to some other software) design the input and data gathering protocol". So perhaps my "world view" is a bit insular.
So the answer to the question, IMHO, is "no".
A mathematician, Chris, needed to boil some water and found that the kettle was on the table. After some thought Chris took the kettle to the sink, filled it with water, placed the filled kettle the stove burner, turned on the burner, and waited for the water to boil. The next time the kettle was on the counter. Chris thought about this new situation, placed the kettle on the table, and proceeded as before.
Nate
Anyone can draw, most people can draw pictures, the really good ones make art.
Nearly anyone can be taught to code. Most of the coders can make programs to solve problems, but a few of them can make software.
A lot of the skills are similar to art, a lot of touchy feely stuff learned thru skill and practice. We can learn the skills but it takes real practice to be good at it.
If something is so important that you feel the need to post it on the internet... It probably isn't that important.
Math is continuous. Y isn't set to X + 1, Y *is* X + 1. That's not true in computing. Y doesn't become X + 1 until it's set to that. Before that it's something else and after that it doesn't matter if X changes. Computing is incremental. State-dependent. The language of mathematics is poorly equipped to describe it let alone think in those terms.
Moderating "-1, Disagree" is simple censorship. Have the guts to post your opinion.
The question is whether everybody can become a good programmer, and the answer is a resounding "no". Most people can not.
Unfortunately, many people do not get that and do a lot of damage both to the profession and to the people later trying to use the software produced. Bad programmers, which there are really a lot, maybe even a majority of all programmers, generally have massively negative productivity and destroy wealth that others create. Of course, the bad programmers are only partially to blame for this. The perhaps worse problem is bad managers that hire bad programmers, either because they are cheap, or because they manage to give the impression of being good programmers. This is a really huge problem.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
You can give anyone a brush and a palette, and they can throw colour on canvas.
Does this make them an artist?
The same applies to programming. Anyone can pick up a book and sling a bit of code, but that's a far cry from being good at grasping and designing complex distributed systems.
Still, until programming tasks are automated, we need a lot of those paint throwers to produce the grunt code. Unfortunately for the North American programming market, that learning environment has moved to offshore cheap contracting sites, which means our local talent isn't getting the exposure to how the internals of frameworks are coded that they used to.
In the long run, that's going to hurt the senior programming market because there will be a shortage of people who've learned through experience rather than by Google and textbook.
I do not fail; I succeed at finding out what does not work.
bent of mind that makes for a successful programmer
is quite similar to that required to successfully create a proof in mathematics. Both mathematical proofs and computer programs can be either hack jobs or works of elegance, or anywhere in between. I think it's safe to say that my efforts in both areas tend toward the former.
Geology - it's not rocket science; it's rock science
Yes. I can.
Yes, brain function has a tendency to influence how good a person is at something, but all it really takes to learn the general skill set is enough interest and motivation to get it done. (I won't claim that a person with severe mental impairment follows the same rules, but that can be said of any severe disability.)
I know of plenty of people who have learned programming simply to get a job (that they needed, but didn't want); my own father is a plant scientist working as a farm advisor, but in order to keep his equipment functional, he's learned quite a lot about computers--including some very basic programming and scripting skills. (He also works with GIS and such, and has been tasked--usually for lack of anyone better being present--with installing Unix and Windows NT systems, among other things, way-back-when.)
I think this same trend of interest/motivation leading to ability is true with virtually every field: if you find it interesting or necessary, you'll work to figure it out. Notably, there's a metric for measuring intelligence by a person's number of interests and aptitudes, rather than the traditional (deeply-flawed, IMHO) Intelligence Quotient tests (which test for math skills and little else). The difference here is that a person with a ton of interests will be self-motivated to learn a lot of things. Even a person with little interest in something (like me and most mathematics) can score well in classes (get an "A" grade) if presented with the right motivation. Why should programming be any different?
I strongly suspect that the rhetoric about only certain people being able to do this kind of work (based on innate ability, rather than education/skill) is largely a function of the human need to feel needed. If everyone can do it, a person with this skill set will undoubtedly feel less necessary--even if that's not the case. This isn't necessarily a "nefarious" thing, so much as a "you're a normal human being" thing; accordingly, I mean no offense by saying this. :-)
I think anyone can lean how to use a bag of tricks. Learning a programming language, the syntax. Applying that bag of tricks to a given problem get's a lot harder but can be learned up to a point. Actually writing a commercial grade application takes pure skill and I am convinced it takes a certain mind to do it.
Although OO allows programmers to compartmentalise a given problem, someone still needs to keep all those objects in mind. It is well known that a good program is written in a short time. It certainly applies to how I work. In a rapid speed a range of classes are developed and this wondrous abstract model evolves in your mind that a programmer can see from all sides at once. I suppose it is a bit how chess masters can play chess in their minds (Although I really suck at chess)
If a project stretches over a longer period or if it is interrupted with different projects the quality suffers as it get's harder to keep the mental model pure and complete.
There are 10 kinds of people in the world. Those who understand binary and those who don't.
That joke ceased being funny, 10 years ago...
HSJ$$*&#^!#+++ATH0
NO CARRIER
No one with 1600 SAT scores would "struggle through" solving compile errors unless by "struggle" you mean "take some time to solve when they're first learning".
A really good SAT score is an indicator that you are really good at taking standardized tests.
There are often tricks and approaches, that kind of help guide you to what an answer should be in such tests.
But in real life, when a compiler is spitting out a really obscure error message, that's a whole different skill to parse and understand. Heck, it's a whole different personality type to even want to follow the rabbit hole of cryptic compiler messages to find eventually the true issue.
I also knew people at school that had extremely high scores in the SAT, really good grades elsewhere but computer programming issues really befuddled them, and they were poor at retaining solutions to same.
Computer programming is this odd combination of standard academic learning combined with real world "well this is how it all actually works in practice" because in the end computer programmers have to make something actually work. That is I think the reason why great students can struggle with it yet, because they have not yet absorbed a lot of real-world problem solving skills outside the more narrow academic channel.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Oh for heaven's sake. If you aren't a computer scientist (and the above statement demonstrates that you are not), don't make assertions about computer science. And if you aren't a mathematician, don't make assertions about math. "Math is continuous?" That's about as meaningful as saying "pink is ten." What you are talking about is a difference in notation. Look up lambda calculus on wikipedia, and get back to us when you've cleaned up the brain cells that dribbled out your ears when your brain exploded. Don't even get me started on type theory...
Programming is like cooking.
When your oven starts emitting cryptic messages because you put the spatula back in the wrong drawer, I might agree.
Moving to programming from cooking is a far vaster bridge than just "interest".
Now a car mechanic on the other hand, is used to dealing with the kind of malign electronic entities programmers face often.
Perhaps that in the end is the real reason we see so few women programmers, they are not as willing to fight virtual evils just for the sake of victory when complete.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Creating an algorithm for a specific outcome is not like drooling on a rocket scientist, but describes cooking and programming.
Cooks are FOLLOWING the algorithm. Most cooks are in fact computers, not programmers.
Chiefs and programmers yes create algorithms to follow. But how many people create dishes from scratch often?
"There is more worth loving than we have strength to love." - Brian Jay Stanley
"As there is an absolute minimum, and no maximum"
So, you got that wrong, too... ;)
No, there is no absolute minimum. The IQ never reaches 0, it just approaches it.
You are correct however that there is no maximum.
The reason? For both - it is a quotient.
Anyone can become a programmer but not everyone is good at it. This is like all things in life. Take the project manager for /. forums for example...whoever was the project manager for the forums put in features to make the forums difficult to use (as proof I give you /.'s declining traffic stats http://www.alexa.com/siteinfo/slashdot.org).
The programmers -- you should have above average intelligence, blah, blah, blah. Nobody can define intelligence and nobody can measure it. All you have need is to enjoy thinking like a machine. I enjoy it. I'm okay at programming. Ego is the primary block to personal improvement in programming. Lack of willingness to work with others, see the point of view of others, and to respect others is the primary block to professional progress among programmers. I really respect what programmers do. I spend serious time programming. More often than not programmers are there own worst problem when it comes to personal and professional advancement. Few realize that when a programmer shares code it is intensely personal as it reveals how their individual brain works. What other profession is that personal--none!
Being a programmer is nothing more than being able to memorize the basics of flow control, learn new langauges, while using and constantly reffering to a refrence guide, and rote memorization of a few basic commands and techniques.
Oh its really easy to just be a programmer.
The real question is:
What does it take to be a good programmer? Or at least someone who codes at the bare minimum talent level that effort is not entirely wasted and foward progress is still being being made?
That is someone who in addition to the above, needs innovation, critical thinking skills, ingenunity, and the ability to re-write the rule book when and if appropriate.
Programming isn't algebra, it is metaphor.
I think you're confusing algebra with elementary algebra. FYI, algebra provides sufficient tools for building a Turing-complete programming language and also any program written in any Turing-complete language can be expressed in terms of algebra.
I'm not sure, but I think that's why they call the medium a "programming language". It isn't devoid of math or logic -- far from it -- but it isn't the same thing, either, and a person good at real mathematics can easily suck at programming or vice versa.
Math itself is a language. Programming languages are just some of its many dialects.
Anybody can be a programmer, for that matter, anybody can be a cook! The question should be can anyone be a good programmer? And the answer is simple. No! Programming is problem solving and not everybody is capable of doing that. Ironically even though programming is a highly logical discipline, great programs are written based on understanding the problem to solve and having the ability and creativity necessary to solve the problem and write the code.
Computer science is, practically by definition, a subset of math. But there are many branches of mathematics out there, and being great at one doesn't necessarily mean a person is great at all of them.
Many years ago, someone found a proof for the "Four Colour Theorem" that was assumed to be correct for many years and then refuted. For an experienced programmer, it would have been obvious that the proof couldn't be trusted, and for a slightly clever experienced programmer, it would have been not difficult to demonstrate that the proof was wrong. Unfortunately, there were no experienced programmers in the 19th century, so the proof stood for a few years.
Next question.
What type of programming are we talking about? If it is web programming 99.9999% of webmasters can not write code or program. The majority of websites do not validate. As far as C or C++ goes you can teach yourself, but it takes many hours, day, months and you won't have time for women (hardly) think divorce. Yes anyone can be a programmer, but who will use your programs you write? I programmed as a hobby and universities used my apps, programs or whatever you want to call them. My software was used all over the world for years. The software name I used was stolen by many companies big and small (SmartWiz). I have not written software in years and I loved C++. I enjoy working with web pages and you can check mine to prove I am not a hypocrite. http://cool700toys.com/
I luuuurve people who thing that efficiency doesn't matter.
I make lots of money turning their crap into something useful.
There you have it. You think being able to program makes you special in some way or indicates that you're above average.
Think of everyone you knew from high school. Now imagine each one of them piloting an airplane you are a passenger in. Not everyone is cut out for every job. Some jobs do require the right person to do the job correctly.
And if you think any idiot can write code you clearly haven't ever been given the task of maintaining some other idiot's code base before. If you really think anyone can do the job I recommend you peruse this site some.
Unlike brain surgery, you can be self taught and be good at programming. But just like brain surgery not everyone should be doing it.
Weaselmancer
rediculous.
Have you never encountered Shakespeare? It makes for an interesting and utterly geeky conversation with chicks every time, even when -- especially when -- they're allergic to math. Become the systems analyst for a brief moment, and let them come up with the actual code. Then pull out the laptop, compile their poetry, and watch them beam.
Yes. Anyone can become anything.
Next question.
"we've got trenchcoats and bad attitudes" - John Constantine, HellBlazer
Anyone can learn to program but not everyone can learn to script. A programming language means when finish writing the code you can compile it to an executable. If your not able to compile down to an executable then your not programming, your scripting. I think a very clear line needs to be drawn between those who script and those who program.
I think it's also important to separate programming languages into multiple groups, low level, mid level and high level. At the high level you have anything Object Oriented, these language should be programmed by a monkey and require about as much effort and learning to tie your shoe. Object Oriented languages well very popular just take work and consideration away from the programmer, this to me is a horrible concept. Anyone can pick up an Object Oriented language and hit the ground running.
Mid level languages like C are not as simple but still don't pose a huge challenge. Mid level languages are for the real programmers, those that don't need to hold on to there mothers hands well they cross the street. Your in control with a mid level language, you have the ability to crap out the OS completely if your not careful and they leave the programmer with most of the control. Not everyone can pick these languages up and those that do and become well versed in proper programming have a very power tool. ( Something C# doesn't give you ).
Assembler and machine code represent low level languages. These are the big dogs on the play ground. If you can program a low level language and well then you are a master programmer. They're hard to pick up, hard to use and hard to teach, they're reserved for the best programmers on the market and they leave the programmer with 100% control.
If you start with the simplest tear to learn you enter with OO languages like C#, C++ and the entire group of easy to use languages, I personal think they make programmers lazy and unfocused but at the same time anyone can learn how to become an OO programmer. It leaves the programmer with little work to do and little consideration on safe programming. These are great for beginners and can really help a novice to get there feet wet.
When you step it up to the real languages like C you have to take responsibility for what you do and not fall back on the garbage collectors. These languages are harder to program, require thought and safe programming. Not for novices or lazy programmers . Well still fairly easy to learn the time required does jump considerably.
When you jump to low level languages I would say that it's only for the best programmers around. You have no protection, you can cause serious damage and you can run your head into a wall just attempting hello world. Most professional programmers in the workforce can't even learn how to program in assembler properly. You have to be a true master and I recommend that novices don't even look this way.
In all cases I'm going to say that if you want to learn programming stick to OO languages but move quickly to something that will actually involve skill. If anyone cares I'll talk about scripts and why I don't consider them programming languages.
Apparently.
Oh for heaven's sake. If you aren't a computer scientist (and the above statement demonstrates that you are not), don't make assertions about computer science. And if you aren't a mathematician, don't make assertions about math. "Math is continuous?" That's about as meaningful as saying "pink is ten." What you are talking about is a difference in notation. Look up lambda calculus on wikipedia, and get back to us when you've cleaned up the brain cells that dribbled out your ears when your brain exploded. Don't even get me started on type theory...
Amen. I know people who assert that everything is ultimately math, but I think they're stretching the point.
I'm not a mathematician, but math isn't just the traditional number system operating according to traditional rules. Math is symbolic manipulation, including meta-symbolic manipulation, and an algorithm isn't disqualified from being mathematical for being either stateful or discontinuous. Alan Turing was a mathematician, and unless I mis-remember my schooling, he's as famous for mathematically proving the Turing Machine as for inventing it. The Calculus of Propositions obeys the laws of mathematics and without it, if/then statements would not be what they are.
You do not need to "know calculus backwards and forwards" to do programming, despite what some idiots have asserted to me, and I'm living proof and have the transcript to prove it. However, programming is definitely based on mathematical principles.
For anyone who believes that anyone can become a programmer, I would like to answer the question: Can anyone become a surgeon? There are lots of people who can be taught about basic medical issues and how to treat them, but not all of them can become surgeons. And just as there are lots of people who can learn to write some basic programs, there are few people who can program mission critical applications that fly planes.
There you go, you just proved him right ! ;)
I say no. Working in help desk forces you to quickly realize that many people are completely useless when it comes to technology. There are names I've memorized because they usually call over the same thing over and over again; never taking any note of how I fixed it (I usually explain how to mitigate the issue in the future when I fix things that were certainly user serviceable). Some people I've noticed seem to proudly announce that they're not tech savvy when asking them to do the simplest procedures (such as hitting the menu button on their company issued smartphone). These are the types that would fit the "never try to teach a pig to sing" adage extremely well. The very minute something breaks in their program, they'll be completely lost with the cryptic error messages. I know they're lost when our one system throws a "Datagram buffer too small" error instead of a more friendly "invalid password" message.
But the tools are lacking.
Right now, programming is language-based/text-based. So a programmer is required to mentally keep track of program state -- variables, iterations, conditions -- as he writes more code. This rules a lot of folks out right away (Personal.Brain.StackOverflowError)
Python with its indentation rules is a step forward in that regard -- many 'real' programmers find its whitespace rules chafing (as they have no need for it), but newbies get visual cues about the program state at the line they are currently on.
There aren't any special requirements to learn efficient programming. Those that say you need a certain mindset to learn programming are full of shit. Don't let society, which has held a PhD in bullshit since the longest, tell you what you can and can't do. This world is in need of independent thinkers, so fear not when delving into unusual ground and be sure of yourself when doing so. This applies to everything.
Everyone of us has a very complex computer at our use, far more complex than any invented computer or programming language can yet achieve. Its the brain.... Question answered!
Can anyone do math? There was a time when only socially elite had such a status, for math was hard to do with roman numeral type of math. But the base changed and now more can do math than actually know how to manually.... the use a computer called a calculator. The same applies to programming computers, but the difference is that those who can create the tools to allow all to program computers are holding on to their position for money and/or ego. For lets face it, the goal of programming is to take complexity and make that complexity easy to use and reuse and for this to play out logically is to understand teh same cane happen with programming computers as had happened with math beyond roman numeral style of math.
Short answer: No.
I've seen some people hired as programmers who couldn't really program.
Everyone has some things they are good at and some things they aren't good at. Not everyone is good at programming.
Coder's Stone: The programming language quick ref for iPad
The central conceit of mathematics is that everything is math. Life, the universe, everything. That's why "the answer" was 42, or didn't you get that?
Tell a physicist that his work is just math and he'll sneer derisively. Tell an engineer and he might crack the joke that the difference between theory and practice is that in theory there is no difference. Yet because so many of the founders of computer science started as mathematicians, we're willing to tolerate the similarly absurd claim about computer science.
My degree says CS and I graduated with a 4.0 in-major from a school that while it wasn't in the top 5 is reasonably high up the list. Somehow or another I satisfied the professors that I knew the material and then went on to satisfy employers too.
On the other hand, both of my parents hold degrees in math, and theirs are from top-5 schools. My father has even won awards for his brilliance in cost modeling.
So when I talk my father through a computing problem and he can't work his way through the next similar one, and then I face the same problem when he walks me through something in differential equations, that gives me a pretty solid clue that the two fields' underpinnings are dissimilar. If they weren't, the insights and approaches to problem solving would be portable.
As for lambda calculus, that's a great example: a false mental model of computing. It offers great insight into a set of seemingly simple computing problems which are not solvable. But it offers little insight into usefully solving problems in computing which -are- solvable. It presents itself as a system by which the correctness of a computing solution can be proven, but such proofs are so tedious that using it to prove the correctness of any complex (i.e. useful) computing problem falls to simple statistics: the probability of undetected error in the proof approaches unity.
Even the problems proven to be unsolvable with lambda calculus turn out to be solvable in the practice of computer science. We just move the goal post: find a computable way to get an answer that's "good enough." Indeed, much of the art of computer science lies in intuiting when and how to redefine the problem so that you reach a useful solution.
Which is not to say that math is not a useful tool in computer science. Boolean algebra: critical. Algebra in general, damn important. Combinatorics, really helpful. Probability too.
But Calculus? Trigonometry? Geometry? Outside of very specialized portions of computing, these branches of math have no value to computer science at all.
Moderating "-1, Disagree" is simple censorship. Have the guts to post your opinion.
Some things are beyond normal people. Physics. yes. Programming? no. anybody can.
Better question is can anybody become a GREAT programmer? no.
Then there is the part about proper education and motivation. Even with motivation, not every kind of mind has an effective learning method towards the goal they want to reach. We don't know the mind well enough to provide the education some people need; we require people to adapt to generally a 1-size fits all approach where the educators themselves are almost always the types who succeed the BEST at the current method, so naturally, they have a bias for it and may even judge others by the metric which worked so well on themselves. It deflates your ego and undermines your accomplishments to think that you just lucked into a model that was better suited to you. It feels much nicer to believe you are just better than others and have tangible proof to back it up (even if it is actually unproven.)
You can now be shot in the head and they know how to teach you to relearn many things that wasn't possible years ago; the process has advanced. Your brain could be trained to do anything most likely because of all the extreme examples of what it is capable of doing. We just don't know how to do it and won't figure it out for a long long time. If we did, we'd have big problems with formalized brainwashing that make stuff like Fox News look pitiful.
Democracy Now! - uncensored, anti-establishment news
Programmers are just as likely to do in cooking what they do in programming.
Meanwhile everyone else just follows the book.
It further proves that cooking is a very bad analogy for programming.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Everyone can learn to program, just as everyone can learn to write.
But learning to write *well* takes time, lots of practice, and a desire to actually get better as a writer. And every now and then you bump into someone whose writing is *truly* good or truly innovative. This is rare enough that they still give Nobel prizes for it.
I think the same basic principle applies to programming. Being a good programmer takes time, lots of practice, and a desire to become a better programmer. And every now and again you bump into someone whose skills are something else again. Although Alfred Nobel's ability to predict the future was a bit lacking, so there's no Nobel prize for programming.
But no, it doesn't take a 'certain kind of mind' to learn to program, any more than it takes a 'certain kind of mind' to learn to read and write. Although medieval monks surrounded by a sea of disinterested illiterates might have thought otherwise.
The answer is similar to the ones for "Can anyone become a rocket scientist?", "Can anyone become a carpenter?", "Can anyone become a painter?", etc. Depending on what you're really asking, the answer is either yes, no, or maybe. "Can you get the job?" "Can you become qualified/licensed?" "Can you be successful?" "Do your peers accept you?" These are all different questions being lumped into one.
Actually, there are 10 kinds of people in the world, those who understand binary, those who don't, and those who can't recognize a base-3 joke when the see it.
APK quotes people (including myself) without context and should not be trusted. Just thought you should know.
I think enjoying programming is some kind of genetic mutation. No matter who good the software jobs market is, few people get CS degrees or otherwise want to be software engineers or programmers. It isn't quite a mono-culture but programmers and software engineers have so much in common that one can almost forget about how the rest of the world thinks. As you move out to other engineering disciplines, there are still an amazing number of personality traits and interests in common.
This is all good for those of us who enjoy programming and would like to be paid well to do it but it is strange to me. I often see IEEE and ACM articles about how to "fix" this issue but I don't think it can be fixed. Most folks would not like what we do even if they were totally capable of doing it.
-- soldack
There are 10 kinds of people in the world. Those who understand binary and those who don't.
That joke ceased being funny, 10 years ago...
Eh, I'm only twenty-four months behind the times then.
Perhaps they are portable, and you merely haven't found the reductions.
Heuristic solutions are still in the realm of mathematics.
Big-O notation comes close to requiring calculus.
It depends on how you define 'programmer'.
Most people could learn to do trivial (count 1 to 10 in a loop) and simple things.
OTOH less than 1% of professional programmers whose resumes are filtered by recruiters paid on contingency have all the aptitudes necessary to do well in the commercial environments I work on (I think a larger percentage of engineers are good, although most of them already have jobs and are likely to join a former co-worker at a place which has been verified to be good when that becomes sub-optimal and not go through a recruiter).
Those aptitudes are
1. The ability to think logically, identify edge conditions, and express that
2. The ability to deal with indirection
3. The ability to apply knowledge to engineering problems.
4. The ability to grasp parallelism
I have a set of questions covering these which changes some with time. There aren't any trick questions here - engineers which do well tend to make it through the first question in under 10 minutes and the rest under 5 after which we can talk about their work history and other things. When I was young and naive I caved to management and overlooked a few problems but have since learned my lesson. People you don't want to hire can spend 45 minutes on one and not get to an answer.
Such things should be pre-requisites for a computer science degree but aren't because too many people fail when they are and that's bad for the department's cash flow.
My favorite professor taught data structures with her TAs linking students code into their automated test suites with grades based on whether their code actually worked. Supposedly 1/3 of the class failed. Graduates of that program were generally worth hiring.
She was replaced by a more lax instructor that didn't do that and our hire rate went way down.
You'll find that there are only two kinds of people in the world. People who can parse and replace tokens in their head, and those that can't.
This signature intentionally left blank.
Computer science is, practically by definition, a subset of math.
No. Try it's by practical definition applied mathematics and you're golden.
That's why "the answer" was 42, or didn't you get that?
Sorry, no. 42 was just a throwaway gag, with no hidden deeper meaning intended.
I don't care if it's 90,000 hectares. That lake was not my doing.
Judging by the number of applicants we get for junior (and senior!) software development positions that can't code their way out of a wet paper bag, I'd have to say no, not everyone can become a programmer.
It was so long ago I cant remember who but one of (I think it was the first) Wirth, Hoare or Dijkstra said that the best programmers fell into one of two groups: those with good facility with math and those with good facility with their native language.
The tyrant will always find a pretext for his tyranny - Aesop
Does this question really has to be asked. Yes, everyone can be taught to program a VCR given enough patience. No, ultimate achievement potential in the field will not be the same from person to person.
Facebook.
Comment removed based on user account deletion
Anyone can become a programmer. However, to be a good, even great, programmer you have to have:
1) A flair for logic;
2) OCD;
3) Paranoia (otherwise you write code with hidden bugs - it's hard to write idiot-proof code because idiots are so ingenious, and you have to intuit the many ways users, connected programs, and bad data can screw up your code).
Oh, yeah, and 10-20 years of making programming mistakes helps a lot, too. If you're any good, you tend not to make the same mistake more than 2-3 times, and to recognize the results of any particular coding error in the output of anyone else's code.
Look up discrete mathematics!
I remember one course when most theorems started with provided that 1 + 1 does not equal zero, and they were not joking!
Apparently, there are dumb questions.
Yes, anyone can become a programmer.
Just like anyone can become a manager, a circus clown or a painter.
Does that mean he or she will be any good at it? I doubt that.
Assorted stuff I do sometimes: Lemuria.org
No shit? That might explain why I stated that when I wrote: "The difference you are looking for is someone who can write code (i.e. an amateur) and a programmer (i.e. professional.) Someone who fixes their own car is the equivalent of the former. Someone who gets paid to change the brakes on other's cars - and is qualified enough to bear all the responsibility that entails - is the latter." - [emphasis added] Take a moment now and match up the "former" clause and the "latter" clause. Note that I then pointed out that "Also, not everyone who works on cars and gets paid is actually qualified to be a mechanic"
Guns don't kill people; Physics kills people! - John Lithgow as Dick Solomon on Third Rock From The Sun
There are 10 kinds of people in the world. Those who understand binary and those who don't.
There are 10 kinds of people in the world: those who understand ternary, those who don't, and those insufferably pretentious arsewipes who thought that this was a binary joke...
Nobody likes hard work. Thinking is the hardest work and programming requires a lot of thinking. It's not that programming is hard, it's that thinking is hard and the smartest programmers have worked hard to be good enough to solve the most interesting problems. They understand that thinking is it's own reward.
If that is difficult for you to think about, then it's unlikely you will ever be a programmer.
My ism, it's full of beliefs.
Different types of mind lead to different types of programmers, none of them being really superior.
I know some experiences developers who have problems with recursivity. I have already met some very fast developers who were producing very good and clean code but who had difficulties to understand the requirements and the explanations.
I really do not think that this is a question of intelligence. There are so many programming languages not only because of the different kind of problems to solve, but also because of the different kind of minds.
Programming requires logic and abstraction. This may be slightly more difficult for some people, but as said Chef Gusto, "anyone can cook".
When I was first learning C there were several people in the class who simply couldn't wrap their mind around pointers. They just couldn't get the idea of a variable that had a memory address to another variable, let alone utilize it. Then, when we were learning about object oriented programming, it was actually about a year before I got that 'aha!' moment when it became clear. Now the object oriented mind set is second nature to me, but I remember when it just wasn't there. Then there's multi-threading, the normal forms of relational databases, and design patters; concepts that the average person doesn't really encounter in everyday life that takes some learning, patience, and time to understand sufficiently to write modern applications. I think that in order to be able to learn all this you have to actually enjoy the act of programming, and not everyone does. You can't fully grok the concepts unless you put them in action yourself and see them function.
The Moore-Murphy Law: The number of things that will go wrong will double every 2 years.
I remember one course when most theorems started with provided that 1 + 1 does not equal zero, and they were not joking!
Pedant point: you can't prove that in general, since it's not true on GF(2).
But with integers, then sure.
SJW n. One who posts facts.
I don't agree with that one either. These are all learned skills. Being a liberal arts major at a competitive college is as much of a learning process as becoming a programmer, just in a different specialization.
But what do they all have in common? The ability to reason, to remember, and to organize.
This isn't to say that anyone should be a programmer (or artist). Some are better than others. But if you just want someone to be able to write code, it's not any more difficult than any other major.
Adams said, "It had to be a number, an ordinary, smallish number." Why? Why not the color blue? Or "steak, medium rare?" Why did choosing an ordinary smallish number make "the answer to life, the universe, everything" funny?
Because it poked at two favorite conceits: that there must be some simple reason for our existence and that everything is math.
Moderating "-1, Disagree" is simple censorship. Have the guts to post your opinion.
I played saxophone in the band for 6 years. I have no special musical ability. I played alto sax with the regular band and tenor sax with the jazz ensemble. I was much better at the "jazz" than the regular band music. The difference was that I really enjoyed the jazz ensemble's music selection and I practiced it a couple hours a day, much to the dismay of my neighbors. If you find an interest and practice you can be okay. If someone has an interest in coding/programming they can practice and be okay even if minimally talented.
I only look human.
My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
A snippet of the Wikipedia article on Mozart:
"In Rome, he heard Gregorio Allegri's Miserere twice in performance in the Sistine Chapel and wrote it out from memory, thus producing the first unauthorized copy of this closely guarded property of the Vatican."
A bit more than the average tone deaf person can accomplish. Sometime a trained musician would find difficult I would imagine.
I only look human.
My mother is a halfling and my dad is an ogre, so that makes me an Ogreling
That seems to be a commonality among most CS academics. The real world is a cruel, cruel place for your code. Pie in the sky perfectionists need not a apply.
Not to be rude or a bleeding heart but we still live in a country where 1% of the population cant read... and here we are arguing about if anyone can learn to program. Seems rather pointless.
Virtually anyone *can* learn at least enough basic programming to do a useful amount of small personal stuff (automating repetitive tasks for yourself and that sort of thing), and I think most folks are smart enough to also do useful business programming (basic web development, enough SQL to generate custom reports, etc.)
In practice almost everyone *doesn't*, however, usually because the desire isn't there. It does take a particular mindset to become a programmer. You have to be *interested* in learning how to use a computer at a deeper level than typing words into Google and clicking on links. If the interest isn't there, the learning doesn't happen.
Of course, there are also kinds of programming that are more advanced, which not everyone is smart enough to learn how to do even given the desire. This is true in just about every field, I think. There are kinds of salesmanship not everyone can learn, kinds of writing not everyone can learn to do, levels of sports performance not all athletes are capable of achieving, and so on.
Cut that out, or I will ship you to Norilsk in a box.
Philosophy major here. I specialized in formal logic systems, computational thinking, and neural networks. Now I am a software architect building very math heavy software (geospatial analytics) for Fortune 500 companies using many of those same concepts. I took several CS courses towards the end of school. What I noticed of most CS guys was that they: had a poor grasp of logic (discrete mathematics brushes over the fundamentals far too quickly), had poor reading comprehension skills (which is unfortunate when the job requires you to read technical specs and manuals a good bit of the time), and had poor communication skills (which is why someone like me was able to sneak my way into the job market in the beginning without a CS degree, since I was able to get through an interview without making people uncomfortable). I know some great people who came out of the CS program, but those people probably would have been great had they just gone the self teaching route and majored in Anthropology. CS and programming are evolving. Someone who cannot teach themselves will be terrible at both before long, because they will be left in the dust.
If you want to get a feel for whether or not programming can be learned by "anyone," try teaching it to a random group of people.
Before I tried to teach programming to some people, I was of the opinion that anyone could learn to program. If you could cook, or dress yourself in the morning or operate a VCR, surely programming would be within your grasp right? All it takes is someone to explain it clearly enough. That's because it seemed to obvious to me. Wasn't it obvious to everyone?
Not so much. There are some people that just do not get it. The sequential, logical reasoning involved does not come naturally to them. If you spent a few months at it, they might get some glimpse of the basic ideas. Or they could learn to parrot back rote pieces of code on demand. But the ability to write a program from scratch is not inherent. While it is partly a skill that can be learned, it also takes talent that not everyone has.
Of course, programming is not the be-all end-all of existence. Diversity of talent makes the world go 'round.
The dead, for instance, cannot learn to program.
Programming languages are becoming more and more accessible. I'm thinking Ruby. Understanding the syntax and reading the book doesn't make you a good programmer. Sure, you'll be able to write some utility, but it takes years of practice, understanding of low level architecture and talent to be a good programmer or hacker. I don't have that skill. I tried, but I'm too impatient and I have to admit I lose intrest after a while. Since I know I don't have that talent, I leave it to those who have it and I thank them. Thank you Linux devs. We love you.
Likely anyone who can add 2 numbers and learn to program with some degree of success.
The question is how much success and how easily it will come... for some, math seems easier, for others logical thinking comes more naturally, for others seeing interactions and concepts and how they work together come more naturally.
Each type of thinking pertains to different types of programming -- making some people more effective at coding and some more effective at design, BUT -- assuming one doesn't have some pathology that would force only one type of thinking, all humans are capable of the various types of thought -- and types of thought not natural for a person can be learned -- to the point that they might be better than some other arbitrary person who had
those modes of thinking as their 'primary' modes, but didn't use them in programming, for example.
So .. from a mental level.. anything is possible, but not all things are equally easy or probable.
Second thing is based on knowledge .. Anyone can add 2+2, but not everyone can do calculus... or anyone can write a sentence, but not everyone can write 'Shakespeare'. Training can help, as well as generally skill improvement and theory learning as taught in a school. Some do very well with no schooling, but schooling on the whole in the field you want to be a professional in, is going to help. You wouldn't expect to be a lawyer having gone to medschool would you? (or vice versa)... the same for
programming. Most likely any lay person can be trained in first aid -- and how to deliver a baby -- BUT, if they specialize in it in school -- most people would do better than if they specialized in something else.
You can't become a lawyer unless you go to law school in most states. Same with being a doctor. Sorta wish it was the same for professional software engineer, but then they'd have to pay them too much -- but
the quality of software might not be in the state it is today, if that were the case... with the downside that it might not be as cheap and plentiful.
So it all depends on how much you want it and how much you are willing to self train -- how self-motivated are you to make up and exceed in any area you might lack in?
I studied Statistics for a number of years, and enjoyed learning that. It was more a case of the detective work that it took to solve something, like programming Linear regression to predict the future. Part way through my Studies, I had to take courses other than Statistics for which I opted to take some programming. I was hooked. Twenty-five years later I do other stuff in the IT world, but still enjoy writing system-side code occasionally.
The short answer is "yes", which is why most enterprises have adopted Java. You need not be skilled nor particularly smart to crank out an abundance of code, which caused the glut of programmers (both good and bad) to fight to the death over a bunch of 40k/year jobs.
/. finds me to be 20% Troll, 80% Funny
Mathematics is most basically a field encompassing the methods and concerns of quantification.
The field of computer science has largely been developed and expanded by mathematicians but I can only accept your assertion if you can demonstrate mathematics ability to address matters such as semantics or all of the other myriad concerns that are generally accepted aspects of the informatics field. Mathematics is a terribly handy and important tool in the toolbox but just one. The general companion idiom you may recognize is that if all you have is a hammer, the world is composed of nails.
My best formalization of how to express computer science is that it is "applied philosophy": the unification of the ideal with the concrete as a precursor of and mechanism towards the possible and actual manifestation of the unification of all ideals.
I think that a way to sum things up is if anybody applied themselves enough they can learn the mechanics of programing. However, a very important part of programing is problem solving. This is a natural ability that can be learned to a small extent but only so far. It's just like how a lot of people say that you have to be good at math to program. There's a lot of programing now days that don't involve much if any math but problem solving is central to both math and programing. The way I see it is knowing and understanding how to program requires a certain way of thinking. An example of this would be the scientific method. Anybody can learn the steps but a lot less are able to make it a natural way of thinking.
We were dealing with integers, or at least with non-fractional numbers - this was 40 years ago, so my recollection is a bit vague as to the other details!
We were never attempting to prove that 1 + 1 does not equal zero, just requiring that to be the case (in the sense that no claim of theorem validity was was made when 1 + 1 equaled zero ).
I am well aware that in the group (+, 0, 1), that 1 + 1 = 0. Similarly for the field (+, x, 0, 1). Sorry don't recall the formal mathematical notation used.
What does 'GF' stand for?
No!
There are 'existence' proofs in Mathematics, that show that something does exist, but not how to create one.
That joke ceased being funny, 10 years ago...
There are 10,000 people a day in America turning 16 years old. It is all new to them. Sounds to me like you're moving into geezerhood already.
What does 'GF' stand for?
Galois Field. It's the notation I'm familiar with so GF(N) is integers modulo N.
SJW n. One who posts facts.
There is a vestigial article on embedded software on Wikipedia: http://en.wikipedia.org/wiki/Embedded_software.
A key aspect is that embedded systems and software are "reactive" in that they receive information (data, signals, etc.) from devices external to the computer system, process it, and usually (but not necessarily) send data out to devices external to the computing system. A real-time embedded system (not all are) has time constraints for completing all three of those steps.
A case can be made that programming an embedded (often real-time) system is harder than programming a non-embedded -- called a "transformational" (for obvious reasons) system. The increased difficulty is due to the programmer typically having to deal with the exogenous devices at a very low level, requiring detailed understanding of the devices' hardware. Embedded software programmers usually have some degree of electrical and/or mechanical and/or .... knowledge (but currently based on experience more than formal education). Real-time embedded software and systems must consider meeting completion time constraints for these reactive interactions a correctness (perhaps even a human safety) criterion, not a performance criterion -- adding exponentially greater difficulty as the size and functional and non-functional (e.g., fault management) and complexity increases. Embedded programming deals with more than software abstractions.
A counter-argument can be made that programming an embedded system is at least often easier than programming a non-embedded one. That argument is based on several considerations. Embedded software is usually smaller size (e.g., lines of code) than most non-embedded software -- but in number of application domains (such as certain parts of telecommunications and military systems) the embedded software is 10's of millions of source lines of code. Another consideration is that the embedded system application software development systems and operating systems are almost always simpler than those of non-embedded systems. Whether that indeed makes embedded programming easier-- more difficult -- is specific to the systems, and also a matter of opinion.
So can just anyone be a programmer? Here I ask "Can just anyone be an embedded systems programmer -- good enough to be successful?" I assert that fewer people can be successful embedded -- especially real-time -- programmers.
I provide one piece of anecdotal support for my assertion.
In one of my former lives, I was on the faculty of both the Computer Science Department, and the Electrical and Computer Engineering Department, of Carnegie Mellon University. I created and led one of the largest research projects -- it was for embedded real-time systems -- moreover, distributed ones, thus adding a whole new dimension of complexity. We implemented our distributed real-time OS kernel directly on the bare hardware of multiprocessor nodes which we created by modifying Sun boards (a donation from Bill Joy), and then interconnected those with an Ethernet. (Yes, you can create a real-time Ethernet, or even a real-time system using standard Ethernet--a non-trivial topic out of scope here.) At that time, the standard practice for academic OS research was to implement on top of a *NIX. I was the thesis advisor to five CS Ph.D. students and five ECE Ph.D. students, all of whom did their thesis work in the context of my research project. In addition, I taught cross-listed courses attended by both CS Ph.D. students (a Ph.D. was the only CS degree CMU offered at that time) and ECE M.S. and Ph.D. students.
My experience, which was the consensus of a small group of other faculty I consorted with, was the anecdotal support I referred to: we agreed that in general our experience (note the two qualifiers) was that it was easier to educate an ECE student to be a good embedded programmer, than it was to educate a CS student (having a non-engineering -- usually math, physics, or
Doug Jensen
I've been an embedded systems programmer. Hard real time, you miss this deadline your system fails (didn't kill anyone, just dropped a phone call or missed an alarm, but still hard real time). And quite constrained; one device had 16K of flash and 128 bytes of RAM. I'd like to think I was pretty good at it.
My background: after being rejected from your hoity-toity institution, I went to a humbler school (University of Maryland, College Park) which had a CS program, but no ECE program. In that program, while we did not learn control theory, we did have courses which taught concepts all the way down to the level of logic gates (not how they worked, just to the symbolic level). We wrote a simple compiler, and a simple multitasking operating system in assembler. We also, of course, did all the algorithm analysis and more abstract CS stuff.
My point being that maybe the problem is just that your programs are too specialized; that you can teach people to be good embedded programmers AND good "transformational" programmers. Maybe not; maybe they are separate aptitudes. But I strongly suspect that anyone who can write good complex SQL or good UI code or good data analysis code could be trained to do embedded. But someone who can only write poor hacked-up copypasta SQL or data analysis code or program a UI with a visual toolkit probably could not do embedded at all, simply because it is unforgiving.
Yay! Type Theory!
No. Hence not every one can be a programmer and for all the programmers only a small percent are "good programmers" and it seems that most large corporations have at least a few who are well up the food chain who "think" they know how to program. In essence they may know how to write a program but I've spent many an hour "fixing" those programs, and worse is when you have to "fix" good programs to interface with those so called programs which may be corporate databases that don't even use unique records, but rather use a combination of variables within the record to define it. These are records keeping systems. Imagine what a complicated system would be like after having been messed by one of these "thinks they are programers". I'd disagree that almost anyone can grasp Algebra 1 our of today's schools and I think Mark might agree if the caveat were added unless they have a reasonable education. I only have a minor in Math. Students from the government sponsored schools, taught by progressives in the unions and bound by the PC rules imposed do feel good about themselves for showing up and it keep the schools from getting sued. Of course the students only feel good until they get turned down, or can't even get interviews in their fields of study even if they aren't the useless degrees so many take just to say they have a degree. They blame the system, not the schools or themselves. Then they spend $100,000 on loans to get a masters in that useless field and still blame the system and as the one OWSer said after being asked why she didn't get a science degree. "Oh, that stuff is too hard". The first course to get into college should be a good grade in "Practical decision making". Many of us worked hard, or for many years to save up so we could go to college without having to borrow. Few in the general population including college graduates know anything about science. Most are completely clueless about anything technical. Try to explain math, physics, chemistry, aviation, or even economics and they just get that glazed look, yet they expect the system to provide a good paying job.
I've meet heaps of people who do one course in programming (sometimes a one or two day course) and end up thinking they are programmes (some even claiming to be as good as 'other programmers'.
But, very weird this has come up. As I had a bad experience today due to people who 'think' they can program.
Long story short, an old program of mine was 'hacked to death' by a person who thought they could program. The guy now maintaining the code (another programmer) asked for my help today, and we eventually worked out that back in May the non-programmer who had been maintaining the code removed vital bits that did the calculations etc. So, for the last 3.5 months the business unit has been running with code spewing out incorrect data ... and they didn't notice! Sheesh!
But, programming, like most things, can be done to a certain extent by anyone, but to excel at it and understand it requires a certain mind set. In the same way that people can swim, but will never be Olympic swimmers, and people can cook, but will never be a cordon bleu chefs, and people can write but will never be an novelists, people can program, but some will never be able to write elegant, powerful code the way it is best written.
Sure enough, the cow costume was hanging up next to the superhero outfit and sailors uniform. (S,Spud)
My native language is not English, but Catalan. My (limited) English skills allow me to post comments in Slashdot and Stackoverflow, and I could even have a beer with you and talk about worldy things. However I often need to look up words in the dictionary and I could never write a novel in English (perhaps I could in Catalan, but it wouldn't be so good). I have been studying English since I was 6 but I know that learning languages is not my strong point. So with regard to the computer programming domain, where humans talk to machines to do things, there may be people that have to continuously look up the internet for code snippets or to remember syntax constructs of some language; there may be people that "speak" C so bad that often forget to say "return" to make a function return a value; and finally, there may be people that cannot even understand how to count in binary (0, 1, 10, 11 WTF????). So not everybody can become a programmer, in the same way not everybody can write a novel, a letter or even a post in slashdot :D
You laugh, but C for dummies vol. 1 & 2 were how I first learned to program. The breakdown of pointers in vol. 2 was worth the price of admission. When I did get to college and took formal courses on the subject, the foundation of the "for dummies" books actually gave me a major leg up on the theory and I basically coasted through all of the programming courses.
Until I got to 8086 assembly. That curriculum was put together by Satan.
Fewer lines NE fewer bugs. In my experience developers who strive to do an algorithm or just a function in as few lines as possible, tend to do all sorts of mistakes and thus spend more time in debugging. This is particularly awful if you develop for the web and do stuff in PHP/JS. As ugly as Perl syntax is, you can make sense of it, and all is good. But if you have a dev who does like not naming the variables in line with their use, not commenting, and self-documenting programming is a sort of an anathema to those... I don't like such characters on my team. They are often brilliant, but writing code no one can read easily (spending time to make sense of somebody' coding is wasting time) and for superficial reasons like, well I save ten characters per line, and that makes my program run faster... Makes everybody but them miserable. In response to other questions, CS is a subset of Mathematics. Programming is not a subset of CS, nor is it exclusive to CS. Programming, like math, is trying to describe the material world (and most of our programs do this, you just have to think about it) in a standardised way, but unlike math, who does that for other humans, programming does it for the machines. This has nothing to do with CS, because programming is older than CS. It is more closely related to linguistics, and logic and ofc mathematics. All programming languages are tools that take a abstract or a physical object, or a sequence of objects, and describe it in meaningful and logical way to the computer. Then they "teach" the computer how to manipulate those objects. Mind you, I'm not talking about objects from OOP. I'm talking about objects in a dictionary way ( [object] a thing, person, or matter to which thought or action is directed), one might argue that this is not dissimilar from class-based programming objects... And it's not... And that should be a thought too ;)
Imagination is more important than knowledge. Having both makes one a genius.
If you really don't believe that programming is math, what exactly do you think that a processor does with those "words"?