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
Autists do very well in programming.
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.
With simplified programming languages like Java, that take care of the "hard stuff", anyone can string together some code and do tasks.
It's just like anything else that can be learned. Everyone can do it, but few people can do it well.
Anybody can program at some level, but it takes a certain amount of knowledge and skill to program well...especially in complex systems like "high end" device drivers and large databases or large scale applications. Add "security" into programming and you need to be paranoid to program well.
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.
Like anything, most people can manage to be OK at it, and a few people have the right brain to be good at it.
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.
I'm a programmer, I throw parties and have a hot girlfriend. I'm actually good and have over 12 years in the field. Don't generalize. Just because someone is smart, has sound logic and problem solving skills and enjoys creating via programming does not make them lame.
Yes, anyone can write software, not anyone can write good software.
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! ;^)
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.
There's a particular intuition, a bent of mind that makes for a successful programmer. If you have it, there's little about programming I can't teach you. If you don't have it, there's little about programming I *can* teach you.
Moderating "-1, Disagree" is simple censorship. Have the guts to post your opinion.
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
Maybe programming should be defined first. I am almost certain that excluding people with various mental and cognitive problems, any person can put together a simple flow chart, with conditions in it (doesn't have to have loops, but any non-trivial problem sketched with a flow chart will likely have a loop or two, where a condition is used to split the next step into path A and path B).
However if we are talking about something else, like being able to hold a large piece of application in one's head while coming up with solutions to the problems, designing algorithms, working with fairly complex data structures, maybe working on with low level stuff, memory management, timing issues, multi threading, communications between components and between computers. Maybe in that case not everybody can become a programmer, it takes persistence, it takes good enough memory of the right kind, it takes ability to concentrate on a problem for hours at a time, it takes ability to be by yourself for an extended time period.
I don't think everybody can be a civil engineer for example for similar reasons.
Not everybody can be a doctor, it takes a different level of patience and ability to remember things that surpasses many people's abilities I think.
Not everybody can be a good 100 meter sprinter for obvious reasons.
Not everybody can be a psychiatrist.
Not everybody can be a kindergarten teacher.
etc., all of these things take a different mind set and different levels of patience, etc.
MY OTHER COMMENTS
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
... floating around somewhere. From (hazy) memory, the gist was that among those who tried to acquire the basic skill, some fail to take the hurdles. The second one of them is grokking the indirection represented by pointers. Forgot what the first one was, but obviously a more basic abstraction.
For that is what programming amounts to: Pouring thought into abstractions so that computers might execute the resulting recipe. Seeing how plenty of humans need various crutches to sort our thoughts, it isn't strange that some never manage to clean up the mess enough that a computer might do something useful with the resulting programs. But some evidently do.
Even so, plenty of people who do seem to grok it still produce inferior code. Take, say, slashdot. So heavy on the ajax that writing comments is nearly undoable on slow hardware. And no, not all of us have the latest room heaters equipped with software accellerators to help churn sloppy javascript.
no way Obama can ever write code.
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.
but not a good one....
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.
This resonates with me a lot, as someone who has always "gotten it" about programming. As much as I try to curb myself from anthropomorphizing my code in discussions or comments, it always creeps through in the end. That's how my brain thinks about code: anthropomorphic actors following my written instructions. I'm always absent-mindedly saying things in bug reports like: "We take the value of X from the network packet and do ...", where "We" is clearly some sort of Royal We involving me, my code, and the machine running it.
This is probably a key thing, and I wouldn't be surprised to learn that most successful programmers have a similar mental model. The ones that initially "don't get it" are probably trying too hard to think of code as abstract algebra instead of just actors.
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.
I would not call myself an artist, but I went through various art classes on school. I can paint or draw something, but it's going to look terrible. Programming is the same way. Everyone can probably do some basic programming, but once you start getting into good programming, well, then it starts to drop off.
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...
Not everyone who can paint can do the Sistine chapel.
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
Can anyone learn algebra? Can anyone learn to play a musical instrument? Can anyone learn to write poetry?
The answer to all of these questions including yours is: yes, they can. But some will become great programmers. Others will become mediocre programmers. And some will become very lousy programmers. Just like some people will get great at playing the violin in no time, and others still sound horrible after years of practice.
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".
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.
yes past mental disabilities, anyone can become a programmer.
motivation is the biggest factor here, the subjects we have more difficulty with are those we are less interested in.
Anything a CS Student learned in college I can learn at this desk, we have access
to all the information a major in a CS degree would acquire, and beyond
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.
Almost anyone can write a story; very few can write on the level of Shakespeare, Dostoevsky, or Ayn Rand. Writing is an indispensable every-day tool for most people in the developed world: forms, reports, e-mails, blogs, etc. The same is gradually starting to apply to programming (or at least "scripting") literacy as well: wiki markup, make a spreadsheet do something, automation, etc. With the development of ever-easier high-level languages and free modules to leverage, programming will continue to become ever more accessible. But of course very few can code on the level of Peter Norton, Ritchie & Thompson & Kernighan & Joy & de Raadt, or John Carmack.
If you spend an exorbitant amount of time learning to program as a professional, you have a chance of eventually reaching mediocrity. But why? You will not be very competitive in the marketplace. Maybe your personal comparative advantage was to be a yoga instructor or a gynecologist instead? One can always code as a hobby, even if you end up making crap. (That's how we got WordPress and GNOME 3.)
--libman
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'
In a way, anone can be a programmer. Similar to how anybody can drive a car or a trailer truck. Or bake, or paint, or play the piano, or work as a medical doctor. Anybody can try and achieve something. But not all can program good enough to be usefully employed as a programmer. Being good is even harder.
Read the wikipedia article on quicksort. If you can't grasp it - forget about programming. Or take some beginners courses. Chances are, if you have dyslexia or struggle with math, programming won't be for you either. Maybe you can force yourself to do it, but you won't enjoy it and you'll likely be too slow to be useful. Compilers are unforgiving about spelling, and the understanding needed to compose a program needs the same mind that handles algebra.
Seeing all the shitty code bad programmers have made - it is clear that not all are fit to be programmers. Even if they have passed the usual university courses.
Technically, anyone can learn syntax and write code.
However, being a good programmer requires being able to think a certain way. It's a skill that can neither be taught nor learned, you have to realize it in your mind. Some people just can't do this, and those people will always struggle to write good code.
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
So long as a person has drive, passion and an eagerness to learn, they can accomplish most anything - not just programming.
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"
no - as anyone cannot become poet.
Manufacturing the Oldowan tool set was not for anyone either back in 2.6ma... The rest is history
...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.
There are 10 kinds of people in the world. Those who understand binary and those who don't.
For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
Everyone can become a programmer, but not everyone can become a good programmer.
Up to now, I've had seven scripts optioned (although only three of them have been produced).
Back in the 1990s, I wrote (and rewrote) episodes of one of the biggest television shows ever screened. (And that show is still considered by many to be a landmark in TV history.)
Over the years, a huge number of people have told me that "anyone can do it".
http://www.youtube.com/watch?v=Jvxl9KtgKXE
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.
The problem with I.Q. is that there are not a lot of accurate measurements of I.Q, and you could argue outright lying in many cases. For example, Mensa allows any gorgeous woman that visits their group to between a 140 - 160 I.Q depending on what they're willing to do for it, just showing up gets you at least a 140. This kind of activity belittles the meaning behind I.Q., though you could argue that the men in Mensa are really the ones with the high brains to have come up with this clever trick to get women. They're pretty blatant about this in some cases, just a few years ago a famous model was asked in an interview what her I.Q. was and she responded it was around 120. Mensa noticed this and contacted the news agency to make a statement that if the model was willing to come visit them for a retest that they were absolutely certain she would get at least a 150. Women everywhere should be against this sort of thing, I should think. But, also men too, since it eliminates the point of I.Q. in the first place.
Being a P.E., and having had the title of "senior" thrust upon me, I feel justified in saying that the vast majority of what the corporate culture passes off as "engineering" is in fact nothing more than "administration"; the reason ... in my not-so-humble opinion is intuitively obvious in the lawyer-centric culture of the present day US - as a registered P.E. I can be the scapegoat / fallguy for all the mechanics - electricians - technicians - programmers - middle level managers - executives who do NOT present a target of opportunity.
So, are you interviewing for "Engineers" or for "Administrators" (please, use a Webster's Dictionary).
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. :)
Back in the 80s the first course the collage I went to required for computer science was symbolic logic. (philosophy department), As I saw many people drop out of the computer science program based on the fact that they couldn't get past that the course was only going to deal with the concept of true and false and not maybe. (ie it is raining or not raining. It is 'misting" outside was not dealt with in this course)
"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.
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.
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.
I think that, much like musicianship, handy-manship, or any other skill for that matter, software development is not a single trait/skill but a system of them. All these traits are shared among some disciplines but useless in others. This is where drawing parallels comes from but there are no proper analogies between coding and any of them, much like there are no real analogies between musicianship and painting (tho both require that very vague trait of "creativity" or "artistry", as does good programming for that manner).
So yes and no, everyone could program just like everyone could sing. But that does not mean it will be pleasant if they do it to others.
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.
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
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
I'm not sure about being able to, but I've seen studies that determined that only a small subset of the general population can enjoy being a programmer. One study which I'm too lazy to look up concluded that almost all developers who enjoyed the kind of work they do were classified xNxP on the Meyers-Briggs. That also partially explains why there are so many more male developer than female developers since xNxP accounts for 25% of the male population and only %5 of the female population.
So it very well may be possible to teach any reasonably-intelligent person to write software, but chances are that person is going to hate actually doing it.
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.
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.
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.
I was one of these "anyone" before I got my self a degree in Computer Science, so yes any one can become a programmer and a good one too: all it takes is a decent degree in CS covering Descrete Math, OS, Compilers, Algorithms and DS, DBMS, Digital Design, Numerical Methods etc.
Apparently.
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.
Most anyone can do it; takes a certain skillset/personality/outllook-on-life/etc. to do it well.
Most any idiot can program a simple "Hello World" application (Look ma, I'm a programmer!"), given sufficient motivation to do so; doesn't mean they can code well. That said, I can punch stuff, doesn't mean I'm a decent boxer. I can skate and whack a rubber disc with a stick, doesn't mean I'm a decent hockey player.
Yes.
Look at Java.
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.
The question is... will they be good at it?
...and consequently it is no surprise when anyone does.
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
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
WRT to programming by itself- almost anyone can learn to program. But most people find that converting a task into hundreds or thousands of statements connected by twisty little logic is just nutty. Programmers are the one who don't mind.
WRT to Software Engineering, now, that's a different story. The challenge of finding a robust, practical, maintainable, and extendable solution is an engineering problem. This is made worse by the fact that software engineering is not like chemical or mechanical engineering, as we all know.
For me, though, the benefit of working with self-motivated folks who are always learning is the best part of this business.
Honestly I would say that a good programmer probably posses the IQ necessary to learn all those other functions (no one is born knowing any of them), but of course that's also true for most other high IQ professions. It just demonstrates the broad applicability of that thing measured by IQ.
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.
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
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.
Any nonsense to the contrary is little more than the usual "rock star" bullshit.
Guys: you don't have groupies, and the vast majority of you aren't snorting coke out of hooker's arsecracks. You. Are. Not. Rock. Stars.
As for "anyone" becoming a *good* programmer - that's debatable, but the fact is, there are legions of programmers who aren't good, and are quite gainfully employed spewing out shitcode. Just as there are countless terrible doctors, lawyers, plumbers and people who can't even operate a goddamned deep fryer at a fast food joint out there.
I spent 30 years developing software professionally. And then the seizures came. For those unfamiliar with what an epileptic seizure is like, think some random electrical jolt to your brain. For me, it has totally changed my thinking process.
My brain can't keep all the balls in the air that are necessary to follow the main flow and all the possible branches any more. I just can't juggle all the information anymore, even with wonderful tools like eclipse. Try to explain that to someone who thinks that programming is just an excel macro and that I must just be a malingerer.
Yes, anyone sufficiently motivated can do the easy stuff, but slipping your one or two line change into a million or so line codebase, without breaking anything can be a lot more complicated.
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.
I remember the good old days when folks started with the basics like programming their VCRs, but now, Tivos, DVRs, MythTVs, I mean it has really gotten more advanced. Of course the basics like programming the microwave and coffee maker still apply. While some chose to go low tech and analog back to the kettle and gas range.
In all seriousness, programming is something that often comes out of a need usually. Whether it's folks in business that "program" functions in excel to build better forms, or a kid making a web site which may not win any design awards, but still requires "programming". All the way to folks that innovate, design complex programs and can code circles around everyone else.
To sum it up, others have made some good comments. You will have folks that can program, folks that can program ok, folks that can program well, and folks that rock when it comes to programming. If you look at it like math. Everyone is taught some level of mathematics. Some folks don't get it, but they can do basic math. Others solve the worlds hardest math problems or prove to be the ones that push the field of mathematics to new levels previously unknown. But the key is, everyone learns a little, while some learn a lot. Programming could be the same if folks were taught a little or learned a lot about it. It doesn't take a natural talent to get the most simple languages and code.
I met many "professionals" that work as software engineers and especially consultants, who think they can program and should have never touched a keyboard instead. Often there is not a good system in place to filter out these people.
Some of them cannot really do it, no matter how much they try, either for lack of cognitive resources, or for incompatible character and attitude.
Facebook.
After many years of learning to program. I've seen people start entire programs in college to become programmers themselves and then realize that they just didn't have the personality to do it. Even when I go to right my own programs it takes a certain dicipline to get the software your working on to finish. The hardest part of this is the attention to detail that one must have. Its more then just finding the missing semicolon. You have to have a sense of what is necessary to make a program easy to use. That detail is not as intuitive.
Anyone can learn to program. Programming is easy, essentially it boils down to, sequence, iteration, selection.
It takes a particular person with the right mindset and skills to be a 'Software Engineer'. If you need further proof just look at the overwhelming number of badly written software applications and libraries available.
Good software, and software engineers are a lot harder to come by.
It requires someone who can program, but also understands the theory behind concurrency, networks, and various design patterns.
An analogy would be the way that pretty much anyone can learn to draw squares on a page, but not everyone could Architect their own house. i.e. drawing is just one skill that a Architect needs, in the same way programming is just one skill that a software engineer would need.
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.
I'm very technically minded, greatly admire those who can programme well, and well known in the open source community. And I'm a rubbish programmer.
I wish I were good at it, so very much, and I've made so many attempts at programming, but any attempts I make are crude at best. Anyone can programme at a very basic level, but at a level of genuine competence? No. I think it takes a certain kind of brain.
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.
Rhetorical
Nice way to start a conversation
But proceeds from a false assumption - "there are people who can never learn to program"
That logic invalidates the question
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.
1st correction: programming is like writing a receipt (as is already said by someone).
2nd: writing a receipt is like programming SMALL and ONE task. Real programming (not learning the basics) deals with BIG tasks and with MANY interlinked tasks simultaneously...
sorry, couldn't resist
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.
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
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.
Any nub can code.
Only someone with talent can successfully DEBUG code.
There are different levels of coding too.
Someone creating a new language or compiler...that's hugely different coding from someone trying to make a GUI for a user to do a job faster and easier.
The biggest roadblock in coding isn't skill or desire...it's arrogance.
There are a huge number of arrogant programmers who look down on the user base they are coding for. These kind of coders think they know what a user wants better than the user does. Then the user ends up with a graphical front end they find confusing, buggy, and hard to use.
So in conclusion, my answer would be, yes, anyone can learn how to code just as anyone can learn how to bake a cake. But not everyone can be Linus Torvalds just like everyone that bakes won't be the Cake Boss.
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.
Yes, anyone can LEARN to program. Of course. It is like any skill. Bash at it enough and anyone who can read and write can do it.
Perhaps you mean can anyone learn to be a GOOD programmer, or program WELL.
The answer is no.
Some people just don't care. Others don't want to. Ignorance and apathy go a long way and if the people I work with are any indication then even if you pay someone 100K you still can't get people to get off their ass and do it right and do it well.
To be a programmer you need to be able to understand syntax, objects, containers, etc, all programming is is moving stuff in X to stuff in Y. No different than filling bottles of water from other bottles of water, or learning how to draw and keeping on the canvas.
There is nothing special to do it.
There is however a certain degree of understanding that you get with experience. Someone who draws for 10 years and someone who programs for 10 years are likely not able to just switch each others jobs and automatically have 10 years of the wrong experience help them. Someone who understands both can do both.
This is why people working in jobs they hate need to get out, because their experience counts for nothing to get them a job they will enjoy.
There's not really a lot of jobs out there that require a college or university degree. There are some jobs where the degree counts as experience (medical) and others where research is the goal, where the university is the only way to get access to the research tools to get that experience.
But for most computer-related and art-related careers, experience can be gained at home, in your spare time. You can learn missing things by going to college, but you are only harming yourself by going into debt to get degree in something you already can do. It's better to get a degree in whatever your #2 interest is in. That way you learn something that you can fall back on should your #1 be difficult. For example, I'd love to get a degree in a geoscience field, because I love that stuff, but I primarily like mapping. My ability to program or draw aligns itself nicely with mapping. So if I were to go to university I'd get a geosciece degree, not one in computer science or arts. If all I cared about was programming, I wouldn't get a degree at all, because I can learn more on my own than I would ever get at a university. All the text books are easily purchased (or pirated), so it's not like this information is behind a locked door.
Medical degrees are different, because there is a certain level of liability, you are not going to be able to be a doctor without going to a university or college path. It used to be that in the 18th century that you'd apprentice for most of the jobs out there. Many jobs staying within families. What the university systems do, is allow people to choose their own path. But the present-day version is a corrupt for-profit center that cares little about people picking the right degree.
And this in turn causes immigration and trade agreement farces (see NAFTA Visa) where you only need a degree to enter the country, yet the state won't recognize foreign credentials. This is why all the taxi drivers are doctors in their home country. I met a young lady working at a call center. In the country she came from, she was a dentist. But here they don't recognize her credentials, so what is she doing? working in a call center taking abuse from stupid Americans.
So... no a degree is a meaningless thing except in your home country. If your home country values the fact that you have a degree in X more than experience, and it's insanely expensive to get a degree, then maybe you're better off not getting a degree, and forgoing any job that wants one as a condition of employment.
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?
Anyone with reasonable intelligence can cultivate the knowledge required to program. But it takes a mind for logic, abstraction, meticulous attention to detail, and let's face it- fawning over trivial particulars to make a decent programmer. Notice I said decent, not great.
Anyone can become a programmer, but they will inevitably be a bad programmer. And we don't need any more bad programmers. Dedication, a bit of OCD sprinkled with nerdy tendencies, the strange desire and compulsion to improve algorithmic complexity of a function, the need to understand not that something works but HOW it works, and a strong fortitude for constantly working more hours than an average professional are what it takes to be on the path to programming competency.
The question should really be, is the world ready for bad programmers? As our tools become more and more abstract, I think we'll see a striation of the programming populace. On the top you'll have your Visual Studio button pushers, the individuals that utilize the tools.
Programmers are really tool builders. The difference will always be between the ones who build the tools, and the drones who use them in daily work.
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
I think everyone given the rules and the problem could code. the program might even work. But not everyone will a) enjoy it or b) do it well. It takes a certain kind of person to sit in a chair and spit out quality code. that is not to say that writing quality code cannot be taught, it's just hard. It's easy to teach people how to play baseball but not everyone will excel at it.
So my answer to the question is '1.'
First off, let me say that I am a field tech, and network admin. From the crappy programming I have seen out there, I can tell you that if anyone can be a programmer, it has already happened. Many packages are so bloated, it's not funny. So called programmers don't test their code any more, and just put bugware out there to meet their manager's deadline.
Half of the programmers in my shop can't even spell O/S, let alone know how to use one.
I don't think that anyone SHOULD be a programmer, with such low standards these days, anyone can call his/her self a programmer, and does.
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.
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.
You know I think most people are full of shit in this forum stating such things like you have to be a certain type of person to be able to program.
The thing is university does not teach you how to program. It does not teach you all the definitions of every function like an english course does. It goes over the concepts of object oriented design rather briefly and goes over the simple "semantics" of programming but it does give a chance to practice how to write in a program in a way that is "correct"! If it is done it will be only done perhaps once. How many times did you have to write a story or essay in high school before you got it correct? More programming subjects in universities will solve this problem focusing on rote learning and you will find programming will become as normal as writing a letter.
Most students have to work or do not have the time to study extra or do no have a good mentor to guide them to be able to program.
The workforce does not cater for this insufficiency. In fact, I can see it is in every programmer's interest who is currently employed to make it as difficult as possible to become a programmer because it artificially lifts their wages up!
You think people cannot follow logic in the english language? Think again buddy! Your all full of shit.
few of us understand that design work is the most important part of developing a system. change this feature of our corporate culture, and more people will be able to become competent practitioners.
coming at this idea on a slightly different tack, i know a programmer who is extremely productive (to the tune of ~350/hr when he chooses to work for you). he is also a published author in the field. and whenever the guy starts working for a new client, he offers to give classes in his methods to other programmers in the company. guess how many usually attend them. (if you guessed >0, yr wrong.)
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.
Just like anyone couldn't become a doctor, lawyer, engineer, basketball player, musician, writer, actor, sales-man/woman, you-name-it....
Back in 1980, I took a test called the Electronic Data Processing (Aptitude) Test - the Air Force's EDPT. I got a great score. I went to the Air Force's programming school, where I learned how to use JCL, PDL, flowcharts, assembly language, COBOL, and FORTRAN. I was awarded the title of "Programming Apprentice" and soon earned the title "Programming Specialist."
But I soon learned there was a big difference between me and most of the programmers. I had the training, I had the certificates, I had the aptitude, but I really didn't care if I wrote new code or not! I was just as happy developing databases and training for users as I was writing or debugging code. The other programmers LIVED to write code. When they went home, they wrote code on their home computers. I shook my head in wonder.
Later, I became an instructor for the Air Force programming school. I quickly learned to pick out the students who would be successful from the students who would not. It did not have as much to do with their EDPT score as it did their "Admin" score on the Armed Services Vocational Aptitude Battery.(ASVAB). Basically, people who could think logically AND organize data were successful in the course. People who did poorly at either mental skill, or who didn't care if they succeeded in the course or not, failed.
So, in my opinion (after spending 30+ years in the field) it does indeed take a special kind of mind to be a successful programmer. It takes even more to be a software engineer. The brain can belong to a male or female; gender does not matter as much as passion for the game. Programmers want to solve problems, and they have a special kind of laziness that makes them want the computer to do all the work. Programmers can think logically, and break big problems down into smaller ones. Software engineers have an additional level of discipline that enables them to do the hard parts: tracking their metrics, following the configuration management processes, and (shudder) doing the documentation.
Above Down Syndrome (?) without brain impairments, anyone learns writing. But from there to do with words what you HAVE TO... It is interesting to have bad programmers around so your excellence can show up, but more importantly so that it is considered so NECESSARY that it reaches the stage of popular mass education.