views:

762

answers:

15

Am a just but a part 3 undergraduate of computer science. I would prefer to program. But I am always afraid I may not be competent.So far in school I have learned Qbasic, Pascal, C++ and Java but I cannot burst of developing reasonable software. What must I do to become a professional programmer?

+15  A: 

Fear stops people doing stuff - don't succumb to it.

If you practice programming, you will become better at it.

Galwegian
That's pretty much it. If you don't try, you sure won't fail...but there's no way you'll succeed either.
Nicolas
so true, i like this answer. I tell all the grad noobies constantly. Program something everyday, just keep doing it.
Anonymous Type
+1  A: 

try and write something you may find useful. program as much as you can. then go to http://www.rentacoder.com and start making small jobs to make practice.

klez
good idea, but probably too advanced and may result in generating unnecessary angst on the part of his customers... better to start with some code golf i think.
Anonymous Type
You deserve a 'Necromancer' badge, but I don't think there's such a thing for comments :-)
klez
+5  A: 

Why you afraid man? First try to do some small homeworks. That will be pretty good and make you confident.

You may see large softwares that can done variety of operations. Try to build a small software and test it and look and feel you done it.

You know C++ and Java, that is enough for development.

If you need any technical assistant feel free to ask here or there are lot of sites available to clarify your doubts. So my request is don't feel anything bad, be optimistic.

Sauron
as usual the mighty Sauron has words of wisdom. :)
Anonymous Type
+25  A: 

I recommend getting an internship in a software development company, so that you get experience. Experience is in many cases valued over schooling, and can teach you many things that just learning the syntax of a language cannot.

It sounds like your biggest problem is that you know the syntax of these languages, but not how to put them together into applications. So go for it! Team up with your friends or go it alone; come up with something that you want to make, and make it! And then get an internship like I said, and make things there.

It all comes down to experience, in the end.

Ricket
I wish I could +10 this. One point you've missed though is that companies have codebases of commercial code. Reading already crafted code lets you learn more about designing complex (the OP calls that "reasonable") than any university course.
sharptooth
I think now going to a company is a bit difficult of the financial crisis.
Sauron
@sharptooth The quality of the codebases of most companies I've worked for will just make him more afraid. There is a mountain of crap out there.
anon
@anon : so true, that and it may reinforce the notion that previous decades where spaghetti code was acceptable is a pragmatic approach.
Anonymous Type
+3  A: 

Pick an open-source-software you use and which is programmed with technology you know about and try to add an feature. Send the patch to the project if you're ready. This will give you some practice and confidence and in the communication with the community of the project you learn about what is important.

Mnementh
i would not recommend this for a beginner. most OS software has very high standards, nearly impossible to meet for a true beginner.get someone to guide you (like, on a job, in a university course..)
Andreas Petersson
+5  A: 

Ignore fears and code.

P.s. They won't disappear.

Arnis L.
+1  A: 

Fear is irrational ... that may be because you really don;t know what you can and can't do. That's ok, one of the most important things is to appreciate and have knowledge of your limits imo.

a lot of people fresh out of uni don't have fear ... it makes them dangerous - and as such they dont get a job, so fear is ok. you just have to understand the source of it.

As for what to do. You will be competing with many people with the same qualifications as yourself. You ahve to find a way to differentiate yourself. This can be doen in 2 ways I find.

1) Get experience. Give yourself a project ... Then start building but use the building time to do things that you see on job applications for the kind of work you want. Even if its not amazing the point is that you will of done it a couple of times more than the guy next to you in class - moreover it makes you think.

2) Humanise yourself. Make sure that the people you want to appeal to view you as a person they could be friends with rather than just a candidate ... that means having a life thankfully. Mainly it means having people skills, being able to sit down and talk to random people, figure out what they want and what you can give. Its a very important skill

John Nicholas
+1  A: 

Don't worry if you don't feel competent yet. It would be much worse if you did -- mastering pretty much anything takes at least ten years of practice. Most likely you'll still feel incompetent. I know that after eight years of programming for a living, I do -- in fact, more so than when I started out. :)

The best way to learn is to practice, over and over and over. Peter Norvig has a great article on this: Teach yourself programming in Ten Years.

Rytmis
A: 

Lots of people in software development field are blatantly incompetent independently of their position and do not (want to) realize that. If you will join them but will be at least aware of your shortcomings you will already have made the world better.

User
+2  A: 

"What must I do to become a professional programmer?"

A professional programmer is someone who never stops learning, who is always improving their craft, and who knows that there is a lot they don't know.

The constant effort to keep improving your skill is really all you need. If you're surrounded by people smarter than you, that's actually a wonderful thing, because it means you can learn more rapidly by looking at what they're doing. Talent helps, but it's not mandatory.

You have to love programming though. The only way to get really good at something is to love doing it.

Joeri Sebrechts
A: 

Dear friend, i am an undergraduate person. I don't have university. I study in past to 12 year is in Portugal equivalent at last year before university. I learned c, vb6 and pascal. All this languages is dead for Portuguese market. Next after school i starting learning myself vb.net, c#, html, xsl, java, sqlserver, sharepoint. I founded a job 6 years ago and changed companies 5 times, never fired.

I continue in the market that love engineers, arquitects, etc.. I considered my self so good than this people with university. One example is in my actual company, my salary is more bigger than people with university.

Don't have fear, believe in you. Learn Learn Learn, get social and more important be happy.

pho3nix
+10  A: 

Don't Fear !! It easily to Be ..

I thought this document is nice to read be become professional programmers . This is written by Sarah George

Here some guild lines

How do people become professional programmers? Many people go the "traditional" path through a computer science or software engineering education and from there into professional programming work.

Others become professional programmers by accident. A person writes a small program to help at work, and their workmates say, "Oh great, you can write programs! You're our programmer now!"

Other people start out as hobbyists and follow a less traditional path, not always getting a degree, but clearly wanting to be programmers from the start and working actively towards that goal.

I've been a hobbyist programmer since I was 6. I wasn't writing anything amazing back then but I had started writing and soon found it was absorbing most of my time. Since I never really stopped, that gives me 24 years "programming experience" and counting.

At first I was into writing computer games. Later people asked me to write programs for them, and sometimes I even got paid. From this I learned that software is always for something. Programs are not self contained worlds of their own. People expect things out of a program that have more to do with Japanese or Geophysics or Engineering (or whatever they've got in mind) than with how a computer works. I had to learn something about all those domains in order to write programs for them.

At university it didn't take long before I was a tutor, and that's where I found I enjoy teaching, and especially enjoy teaching programming.

While I was at university I got my first "real" job, writing Visual C++ code for a financial database company. In terms of design and theory it was lightweight stuff. But in terms of working with others on a large project I was being thrown in the deep end! They had gigabytes of source code, growing cancerously through the efforts of a dozen developers of wildly differing skill levels.

In spite of my programming skills being well above average there, I learned to settle for being a junior programmer, a little fish in a large pond.

Skipping along a few more jobs and a lot more years, today I am a senior developer in a small research group—a big fish in a little pond. I've had to teach my co-workers a lot about professional programming, because most of them haven't been in industry to get that taste of what large code bases and diverse skill levels do to programs if you aren't using those "professional" skills to keep everyone pointed in the same direction.

There's quite a gap between "being able to program" and being a "professional programmer." It took me 15 years to go from beginner to hotshot programmer, then another 10 years to go from hotshot to professional—and I'm still learning.

Whatever the path we follow, most professional programmers have in common the fact that they learned to code first and how to be a professional later.

The Meaning of "Professional"

So what does it mean to be a professional programmer? What does it mean to be a professional anything? Some definitions simply say to be a professional is "to make money from a skill," but true professionals also have a set of qualities often described as "professionalism." In my opinion, these qualities are: trustworthiness, teamwork, leadership, communication, constant updating of skills, an interest in minimizing risks and accountability. Each of these effect the professional programmer in certain ways.

Trustworthiness The concept of trustworthiness applies in several different ways for programmers. Can you be trusted with a job? To perform a task without someone checking up on you? Can you be trusted to ask for help when you need it?

If you're given clients' data or have signed a non-disclosure agreement, then you are being trusted to respect privacy. You are trusted to check license agreements on third party tools or libraries and to get licenses or permission as required. And like any professional you are trusted to simply do a good job.

Teamwork Will you genuinely cooperate with your team mates? Will you work to mutual advantage and not just your own? Can you trust your team to work with you? Can you do your share of the work and trust your team to do the rest? And can you accept your management (and sometimes even clients) as part of the team, everyone trying to get the same job done?

Leadership Showing leadership means both earning respect from others and knowing what to do with it. Recognize the skills of your team members, and make sure you can offer each person challenges and development without exceeding what they can cope with at a given time.

Leadership involves not always getting to do the "fun" parts of a project yourself (that scary "delegation" word). It also involves not asking anyone to do a task that you wouldn't be willing to do yourself. It's not just the managers and lead programmers who need to show leadership, it's any professional programmer. The best programmers to work with are the ones that know what's going on, not just their little tasks.

Communication Respecting the people you work with, and your clients, enough to really listen to them is a critical part of communication. Teamwork can't happen without good communication, nor can accountability.

Communication is critical for helping clients to produce usable specifications and feedback. Will you question whether the specs you are given really will serve the purpose that the client has in mind?

Communication skills help with making meetings timely and effective. A professional's communication is effective and to the point, whether in person, in email, on the phone or in written documents.

Documentation at first seems like a programmer-specific concern until you consider how many people require documentation in a serious project: other programmers need high level, API level and in-code documentation; managers need planning, progress, and bug documentation; lawyers need proof of what was done and when; and users need documentation on how to use the software.

Updating Skills Keeping your skills up to date involves staying aware of what's going on in your industry. What are the current ideas about methodologies like eXtreme Programming? What libraries and tools are out there that might support your project? What are the current refactoring tools? How about standards, file formats and protocols? Are you up to date with Unicode, XML, SQL, and all the other acronyms? Perhaps you're missing out on something if you're not. What platforms are your potential clients using? Should you be learning about cross platform development?

Basically you need to possess a genuine interest in your field, and to read broadly so you know what's out there and which areas to then read deeply about. You also need to accept that even (or should I say "especially") the very best programmers are still learning.

Minimizing Risks Familiarity with best practices, combined with a healthy dose of common sense, will take you a long way towards managing risks. Professional programmers keep track of known bugs or any other change they intend to make. Bugs are risks, and a simple database can prevent you having a product ship with bugs you'd simply forgotten.

Another risk that's often not properly considered is any and all changes to the source code. Source is your livelihood and any change can be a mistake. There's good software out there that will keep track of every revision of your source code and even help merge code that multiple people have changed.

Professional programmers are careful to do enough testing. A software company will generally have testers but the developers need to know how to get the most out of testers and also how to write their own unit and regression tests to make sure every change in behavior is noticed and checked by a human.

Keeping your code simple and well styled is another commonly overlooked way to manage risks. If anyone can look at the code and see right away what it does, you are far less likely to find bugs in it later, and you are less likely to have a junior programmer attempt to change something without understanding it first.

Another risk is the client changing their mind, or more often changing their specifications because they've realized it wasn't what they had in mind. Write your code to be modular and reusable and you won't have any trouble adapting it to changing needs.

Accountability Writing code for others is a responsibility. You need to make sure your software is reliable. You need to make sure you and the client truly understand the requirements and specifications. You need to have documentation of your work, all current and past bugs, your progress, any problems, signed-off milestones, and more. You are also required to know about some basic legal issues, like software licensing, the terms of your employment contract, and intellectual property law.

As you can see, there is a huge gap between "coding" and "professional programming." Most programming courses focus on the coding side of things, and the professional skills tend to be glossed over or not covered at all. I have found myself regularly teaching these skills to new co-workers, which highlighted the need for "professionalism skills training." Teaching my co-workers reminded me how much I enjoy teaching. I decided to teach more people by trying my hand at professional writing for a change.

I set up a web site, which is completely independent from my day job. The site is called Developing Programmers.com. It is devoted to teaching people how to develop into professional programmers. Since founding the site, I've been presenting the tools and ideas that I think professionals should know about.

Some of my articles simply refer to other sites of benefit to would-be professionals. I research other articles from scratch: tutorials, guides, and discussions of things professionals should be thinking about, like revision control, documentation, keeping your group pointed in the same direction—and of course, each of the aspects of professionalism that I listed earlier.

These days I consider myself to be a professional programmer, though I am still discovering the depth and breadth of what exactly that means. Perhaps that ongoing exploration of programming and of professionalism is what makes this for me a career and not just a job.

This information is taken from http://www.developerdotstar.com/mag/articles/software_professionalism.html

joe
+1  A: 

As others have already said, you need to give yourself little projects and then complete them, throwing in challenges wherever possible. In other words, try to attempt things you haven't done, maybe using a technology you aren't too familiar with.

In the end you will learn and gain experience. You should remember that even if you fail, you have gained experience and will be better equipped.

On another note, you shouldn't ever directly compare your programs to professionally written software. The reason being most commercial software is written by teams of people. This usually means each person only doing one small task. There are, of course, exceptions - but not many.

Peter Spain
A: 

The best way to get better at programming is to practice. I would suggest working on personal projects, with the following steps :

  • Choose a language you want to learn.
  • Buy a couple books, or read documentations and tutorials about it on the web.
  • Google "Best practices " and spend time reading about it. Each language has a few strong and weak points. You want to know these BEFORE they show up in your projects.
  • Get yourself a couple personal projects that motivate you.
  • Get coding !
  • When in doubt, don't act as you're alone. Ask the community (StackOverflow, ...) and the community will very often help.
  • Take some time to stop and look at what you've done in the past few hours/days. Reading your won code will sometimes provide useful hints on how to (or how NOT to) do things.
  • And the golden rule : FINISH YOUR PROJECTS. Unfinished is worthless, in a learning process.

Start with small projects (1-2-3 days tops), see how it goes, and then get bigger projects when you feel confident about your skills.

Working on personal projects means noone will get angry if your project sucks when it's done, beside you. Which is good, because it'll make you want to get even better =)

Nicolas
+1  A: 

Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering. (Yoda)

So, do not have fear.

Instead, keep learning. Read good books. Feed your creativity. Follow the teachings of the wise. And remember that not everything is taught in school.

May the objects be with you.

Daniel Daranas