Is a good programmer born or made?
I started taughing myself programming languages 1~2 months ago and until now I pretty much suck at it. How did you start? Can you become good or are good programmes born? If they are made how many time would you see is enough to get good or give up?
I didn't really know where to ask this, it seems the best place to ask here. |
It's many different things, including knowledge and a way of thinking. For a start, read this (and learn it by heart too): How To Become A Hacker
In this document, mind you, the word 'hacker' means 'creative programmer', not 'haxor'. |
you are good in what you do a lot
|
Taught myself to program beginning in 1980 with BASIC on a VIC-20. Within 5 years I was writing software in C for the Air Force. Patience and discipline are the 2 qualities that are paramount to make a good programmer. Get in a hurry or try to cut corners and you will fail. I have spent days going over a code fragment to isolate a bug and it is what it is. Approach things in a linear, step by step fashion and solve one problem before moving on to the next.
In my day, every byte of RAM and storage was crucial so code had to be fast and efficient. Now days, I think folks tend to cobble stuff together and good enough is a mantra to live by... |
Quote:
Someone born with "perfect pitch" has an advantage in music. There might be an equivalent to "perfect pitch" in programming but that characteristic has not been discovered. It could be a gift for problem analysis and algorithm design as opposed to the ability to master the syntax of many computer languages. Most people can, with motivation, become competent programmers. A few, a very few, will become true stars. Daniel B. Martin |
Quote:
Since then the cost of hardware has dropped radically. The cost of programming has not dropped anywhere near as much even allowing for inflation.. Programmers are possible twice as cost effective today as they were in 1967. Hardware is approximately 60,000 times more cost effective today as it was in 1967, allowing for inflation. Now a good programmer optimizes for programmer cost which also includes the cost of software maintenance. Optimizing for hardware efficiency is still done but not so much. --------------------- Steve Stites |
I am self taught, and I am definitely better now than when I started. I believe a good programmer can be made, otherwise, there would be no point.
|
You have to be interested. I mean you (have to) want to know how does it work, you must enjoy learning it, (be familiar) and working with it. I do not mean you want to complete your job, but to have the power to (be able to) solve problems. One usually says the best thing is when your job and your hobby are exactly the same thing. You will be a good programmer if your daily work will be seen as solving a very interesting problem and you are the best to give the perfect solution.
From the other hand you must really have the knowledge to really "produce" the best solution. So everybody can be a very good programmer just he/she should do it as a hobby, not as having a rough time... Just how I think |
Made.
And it gets easier the more you do it. Mastering one language, for example, puts you in a position to easily learn languages that are similar in design. |
Quote:
|
I taught BASIC programming for a year while I was stationed in Korea. I began every new class the same way:
I would write "DWIM" in large letters on the chalkboard before class but I wouldn't mention anything about it. Invariably someone would ask what it meant before class ended. This is where I explained there was no "Do What I Meant" syntax in any programming language. The first few classes I would look out at the audience and guess how many "light bulbs" would illuminate before the course ended - some never did... |
Quote:
(just look for "how to write good perl/python/ruby/whatever" code or look for optimization tips) |
Quote:
A function is a function. A class is a class. Sure there are 'differences' between languages,.. but in the end it is all just different ways to access low-level assembly structures. If you know what you want at a base level, it shouldn't be hard to figure out the code, no matter the language, to do so. php Code:
<?php Code:
#include <stdio.h> Code:
('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-,jcL(I&%$#" |
Have to disagree with you pan64, of course it takes a while to 'master' a language, but that's not what I'm talking about. My first language was Python. Took a great deal of time until I was able to write any sort of non-trivial/productive code. After I was able to do so, learning to write non-trivial code in Ruby, Perl, Scheme took only a matter of days. Like I say, just learning the syntax, because I already knew the fundamentals. You mention available libraries, once understanding how they work and what they are used for it's a matter of 'import foo' in Python vs 'load foo' or 'require foo' in Ruby. 'elif' vs 'elsif'. These differences are not hard to grok...
|
Neither. They are forged upon the anvil of experience.
|
Both. All programmers were at one time 'made' by parents, and 'born' to their mother.
I think that the question is vague and leading though. All skills are acquired through practice and experience. Pretty much everyone knows this. No one has EVER been born with some advanced skill - like programming - in their brain. Not ever. That said, some people might have an easier time picking up programming than another. But, as with most things, practice and dedication will eventually allow you to do it. Unless there is something physically wrong with the persons brain. |
Quote:
A good example of the flawed work produced by a programmer who is not fundamentally sound is Windows. Bill Gates was self taught and thought he knew it all. In reality he was missing some basic concepts, especially the concept of modularity. -------------------------- Steve Stites |
Programming is a craft just like any other. You learn a craft by doing it ... a lot. It certainly helps to truly love what you do.
And, I do. I still do, after more than 30 years. It really needs to be, at least in part, your hobby. It's so much work, sometimes, that you really need to be having fun. On the one hand, I continue to be fascinated by the prospect of causing a machine to do useful work for people. I never dreamed that the machines would become as powerful as they are, nor that they would do so as rapidly and as completely as they did. However, I guess what really motivates me is ... the people. People who genuinely need what you know how to do for them, and who respect you and rely upon you for your ability to do it for them. There just aren't that many things that you can do in a business situation that are so rewarding. I've been a consultant (http://www.sundialservices.com, a trainer, a professor. And, in every case, it's about having the ability to make "a machine" do useful and valued things for "people." (Plus the aforementioned fascination with just what these machines can today be made to do.) |
Both. I don't think there is a single topic where nature vs. nurture is relevant.
You have to be born with a certain predisposition, and you have to work at it. If you aren't interested in computer and programming, then you will never be a good programmer no matter how hard you try. |
Quote:
LONG LONG ago, within a month of starting to learn programming (in a national science foundation summer program during high school), I was better at it than the majority of profession programmers. I was tutoring graduate students in programming a few months later. Much more recently, someone who had been the best CS student in a local high school before going to a college that wasted his time (his programming sure didn't improve compared to what he did in high school) worked as a summer intern where I work and did more and better work than PHDs with 10 years job experience. When I was in high school, I had good success teaching many people who were not naturally gifted to be very good programmers (while failing miserably with others). More recently I have much more consistently failed to get across the concepts that good programmers need. Some things may be just too obvious to me to even communicate to people who don't naturally get it. Looking at how programming is normally taught, I can see there is never even any attempt to teach the important concepts. The teachers never learned the important concepts themselves. I don't have enough insight into how ordinary people think to understand why they can't ever be good programmers or if that is false what they or their teachers would need to do to build those skills. All my experience says it just doesn't happen. A bad programmer given another 20 years of job experience is still a bad programmer. For your individual advice, that should not be as negative as it sounds. The large majority of professional programmers are staggeringly bad at it. Those hiring and managing programmers are largely clueless about competence and about results. With perseverance and effort, anyone can fake it as well as the average professional programmer and get good pay for really rotten work. |
The ability to learn and use all of the aspects of (say) GUI programming and programming syntax is knowledge that can be acquired with time and practice.
However, the ability to come up with an algorithm for a new and unusual situation is not just something you can learn, you need to have something to begin with that can be developed. |
Quote:
|
Quote:
|
The very first computer program that I ever wrote ... took me six months to write, was eight lines long, and had a bug in it. :)
(Note: the "personal computer" at that time was, say, the Altair, or maybe the IMSAI, or would you prefer the SWTPC 6800 or how about a KIM-1?) In those days, you didn't have "direct access to 'a computer,'" and there was not yet anything 'personal' about them. Intel was making rapid progress, but the 'chips' that we take for granted today simply did not exist, and would not exist for several decades. Still, we did well with what we had. I learned the craft by trial and error, and by what was (even then, and still today) a genuine interest in, and enjoyment of, the process. I mastered it because I persevered. I persevered because I wanted to. I continue because I still want to. (Uh huh, still living by my hobby. Cool, huh?) Try to find out early whether this really is "something that fascinates you and that brings you pleasure." Because, if it doesn't, there are plenty of other ways to make a good living. "Do what you love, and the money will (most of the time :rolleyes: ) follow ..." |
Quote:
but I also know there are people that going home and watch netfix and others go home and continue learning and continue practicing with private/hobby project some go home to play computer games, others think about how to write those games there are people that think that when they have a certificate that they know every thing and than there are people that feel that the more they learn the less they know. all these things has something to do with passion, and you can develop a passion for something you do not need to be born with anything It is not like you have no change for some sports if your body does not fulfill certain criteria and by the way, the beauty of open source and free software and documentations, is that they give equal chances to every one that wants to learn. I and I know that there are a lot of programmers that think that they are computer scientists and need therefore make everything super complex. so its possible more a education thing than be born with something, because in real you need more programming craftsman than computer scientists the excuse it's genetic, born with, gifted with .. this is a very comfortable way of seeing things because it gives simple excuses and explanations |
So lack of motivation is the only reason why everybody is not a full bottle on General Relativity or String Theory.
|
Quote:
but even for Einstein or Newton, without motivation and amount of invested work they would not have come that far. in what are you good? in things you like and practice a lot. can you become an Einstein? possible not, but can you become good in Physics? possible yes if you like it and work hard can you became Dijkstra, Knoth, Wirth , Stroustrup, Stepanov,.... very possible not can you you become a better programmer than the average. yes, withing some years, if you work hard and like what you do especially in IT , where new techincs pop up permanently, you can become very good in certain topics within some years if you dont like it, became programmer just because you thought you have a secure job, a cool job, earn a lot of money, what a lot of people did I know, you will produce horrible solutions and change into managment as soon as possible, and do the horrible things there. |
Do not let the problem of writing the code down trouble you. Writing the code is just one step in the process.
One can (should) begin defining the problem. The next step is defining the solution (and: is this solution the answer to the problem?) Then one should think up the steps to take to get from the problem to the solution. This has to be (very) detailed. Once the steps are defined, it's just a matter of choosing the language in which to write down the steps toward the solution. That done, one can write down the code. The hard part is actually (once you're more familiar with a language) defining the steps towards tohe solution. Once you're familiar with one language and the above concepts, learning a new language is not that hard; a few days of getting familiar with it's rules and you're set... Try it out with defining all the steps necessary from your state (sleeping in bed) towards a goal (getting at work) |
Indeed, Ramurd, "defining the problem, and a process for completely solving it," is the real challenge for any programmer (or his/her department). That's the real hard part, not learning the "bits and bolts" of any given <<programming language | operating system >>. Most anyone with serious experience can learn another language or another tool in a day or so, because at the end of the day it's (probably) just another expression of "the same damm thing."
Lots and lots of programmers never become any good at all at design, and generally, never truly "design" anything. They just open a text file and start writing code, literally making the whole thing up as they go. And that is why they quickly box themselves into a corner that they can't get out of. Think about it. What would you think if you interviewed a contractor to talk about building a new addition to your house, and he simply showed up with a crew who started digging holes in your front yard, cutting lumber and nailing it up someplace? ("What? I thought you brought the tape measure! Oh, nevermind, we don't really need one anyway ... we'll just eyeball it, and if it doesn't work we'll just rewrite it again.") You'd call the police, of course, to have this joker not only removed from your property but locked-up in jail so that he couldn't seriously hurt himself. And yet, this is what many "programmers" do. Without the slightest consideration being given to what "the work" is, they "start 'working' (sic)" and fully expect you to pay for it. |
What I think you're really asking moisespedro is:
Code:
How does someone become a 'good' programmer? Some here are talking about 30+ years of experience; therefore they started much like I did, back in the days of assembly language, BASIC, punch cards, and so forth. Programs back then were things like simple sort algorithms, mortgage amortizations, and biorhythms. We were thrilled that the machines did what we told them too, after many iterations of trying and retrying. My thoughts on this are that in today's world, in companies and projects, coding by the seat of your pants does not fly. It may fly as a junior engineer, but not much farther. If you just want to learn how to code to do some cool stuff and occasionally learn some details by mimicry, then fine; do the learn by public domain method. If you wish to become part of a team or do some individual ground breaking work in the world of programming, then you should consider getting formal training; and I would suggest a degree program. I would suggest a degree program because college makes you study a number of subjects, not all exactly programming focused, but focused towards the total picture of their impression of a software developer; you also do this over a range of years which I feel is important as well because it brings experience along with the formal instruction. There are plenty of short workshops, training classes, and so forth. I'm not too sure that they are the best choice. One category of them which are probably the worst for a new learner, but may be fine for experienced people are workshops for focused items in the industry. Workshops sponsored by companies, mainly to highlight their technologies. Therefore the expectations are that those attending are already programmers and they're here to learn highly specific techniques, and also learn about that stuff on specific systems, conveniently provided by the sponsoring company. The other category are things like certification training or short classes each of which you'd pay for. One, they're expensive - so is college. Two, they're typically one-of's. Meaning they're "a" class about one thing. They may teach it to you pretty well actually. But you really can benefit by more formalized instruction; hence why a degree program has about 40 courses over a 4 year period. It would seem dismissive, but basically however good you seem to be at talking the talk; if you didn't take the time, or put in the effort to get a degree; why should I hire you to work alongside me? Why should I trust you to accomplish projects which are critical to our company's success? It says something about an individual, enough so that (1) sometimes the team has difficulty working with that person because their knowledge base is lacking, they are limited in intellectual background and they fall behind; and (2) the hiring manager would be hard pressed to get that person hired at all, let alone justify a position level and/or salary amount. It's not a complete door slam, but it's a pretty big brake applied for that person versus another person with a degree and similar experience. |
Quote:
That would put you firmly in the "made" category. |
Quote:
|
Actually, this thread should be in GENERAL even though it has programming in the title.
OK |
You have to do those in which you can show your skills and tactics. performace is a way to show thier talent. It's depend uopon your intrest, how much you adopt the job scenario and how do results them.
The best talent of every person how he learn and produce results from them. |
Quote:
|
I am glad there is a not a consensus on it and most people said good programmers are made. I was reading a few things about good programmers being born, like a natural skill and that was kinda turning me off. I read all opinions/posts and I plan on writing a more elaborated post later. :)
|
Another thing to remark, some people are doomed to never became programmers. (Sometimes they have ADHD, but other reasons are possible, too.)
|
I think people have a predisposition to certain based on the way they think practice is great and all that but you have to naturally think in particular ways to do things well. You do not choose your calling you are called
|
All times are GMT -5. The time now is 01:57 PM. |