PDA

View Full Version : What skills?



Draconum
September 6th, 2005, 02:57 AM
Hey,
What skills do you think you need to know how to program very well?
I know a bit of html and php but I only know enough to make and maintain a website... What attributes do you need to become a good programmer?
Should you be good in Math? Physics? or just be a computer wiz?
I wouldn't mind knowing so I coudl try and work at this a bit more... plus could somebody explain "for()" in php for me, cause I've always been baffled by this one.
Thanks.


Chris

wtd
September 6th, 2005, 04:23 AM
Know how to use Google. Google is your best friend.

As part of that, you need to learn how to ask questions.

You can't be afraid to ask really smart people seemingly stupid questions.

You need to be willing to learn more than one programming language, and not necessarily start with the language that holds the most interest for you. There are basic concepts which can be learned by practicing with almost any programming languages, but there are certain languages which make it much easier to practice. I would put Ruby, Python, and O'Caml in this list. Their interactive interpreters make experimentation absurdly easy.

invisage01
September 6th, 2005, 04:43 AM
Logic and problem solving skills are what i find that i use the most.. I find that the more problems that i solve, the more i have to learn, the more i discover - the better a programmer i become.

I studied for a number of years.. but have only been working as a programmer for the last 6 months.. in this last 6 months though i have developed at toolbox of problem solving skills and logic that i can use and manipulate to solve a vast array of problems.. but there are still things i haven't come across... that i know will be a problem.. i will stumble for a while.. but learn and add that skill to my toolbox!

math's i dont believe is essential.. but a logical way of thinking is IMHO..

good luck!

Iain.

tehwa
September 6th, 2005, 06:21 AM
I am not a good developer, I worked full time as a programmer for six months doing database applications and ASP web stuff, now I do it in my spare time.

After writing SQL, and doing various PHP projects, I have decided to branch out and learn C.

You'd be suprised how much you will already know about C from writing PHP code. In fact, Every langauge lends a lot from other languages, and if you have an understanding of the fundamentals, you are well on your way.

Like invisage01 has said, you will begin to develop a toolbox of problem solving skills over time, and learn how to tackle logic problems. One piece of advice:

One big problem is just a series of small problems. Always break the problem down into smaller parts and attack them one by one.

In terms of Maths and Physics, it shouldn't be neccassary to really be interested in these topics unless you are writing applications that incorporate them into the logic. Simple arithmetic goes a long way though.

Draconum
September 6th, 2005, 01:29 PM
Ok thanks... I didn't really mena do I need to know physics... but thanks anyways.
Help me out alot.


chris

entangled
September 6th, 2005, 01:46 PM
This is a hard question to answer without asking more questions.
If you are interested, and a bit patient, almost anyone can learn basic programming syntax and statements and write short, simple programs in any language.
If you mean writing programs that seriously use libraries, have several programmers working and that are intended for production use then the requirements change dramatically.
You need to be committed to learning the libraries thoroughly; this could take months or years so you must be interested in what the libraries do.
You need to be willing to cooperate with other programmers.
Mainly you should be enthusiastic and dogged about getting it right. You have to test everything and don't trust to luck.

It's boring and frustrating for most but satisfying for some.

thumper
September 6th, 2005, 01:55 PM
I think the main skill that you need is desire.

Most of the really good developers I know have a desire to learn and to write good code. As long as you really want to learn.

The other biggie, which a lot of people don't really get, is to be egoless. Be prepared to show your code to others and not to take criticism of the code personally. The criticism is normally targetted at the code, not the writer of the code. If you can take this from your peers and mentors and get better, then you will do well.

dcraven
September 6th, 2005, 03:24 PM
The other biggie, which a lot of people don't really get, is to be egoless. Be prepared to show your code to others and not to take criticism of the code personally. The criticism is normally targetted at the code, not the writer of the code. If you can take this from your peers and mentors and get better, then you will do well.

This is absolutely correct. Although seemingly simple, this is a decievingly difficult skill to aquire. I still write sarcastic and critical comments about known weak spots in my own code to deflect this criticism. It's difficult to take, but in the end that criticism is invaluable. I get very nervous at release times because I know some little geek out there is going to find a bug or want to tweak. They're going to open up my source files and start following the logic around to find something to change. I know they will, because I'll probably be that little geek when *you* make a release :). This sharing and snooping and improving of your own and other people's code and slapping bits and pieces together is the greatest part of the open source world to me.

As far as math goes, I wouldn't say you need to be strong in it generally, although it really depends on the problem domain of course. Things like games (with graphics) can be quite heavy in the math departement and physics both for example.

Probably the most important skill that you'll want to develop early (I think this was mentioned in a previous post, but I'll repeat here) is the skill to recognize a semi-complex to complex problem as several simple problems. Those simple problems are the target of your code, and once all of those are solved, so are the complex ones. Don't waste your time writing complicated logic. When you are having difficulties implementing some aspect of a program and are getting frustrated (it'll happen), then stop and push the keyboard away for a moment. Think of simple components of the problem, look for commonalities between the bits of data you are manipulating, go to the whiteboard and draw yourself pictures of the problem etc. Give a few minutes to actually think about what you're doing and clarify it before puking code from the keyboard and you'll probably soon see that you are making the problem far more complicated than it needs to be. Then go back to the keys and implement it.

Patience is also key. And comment your code not for others necessarily (although we appreciate it) but for yourself. Especially when you are first starting, you will look at things you wrote a week ago and wonder what the hell it's doing. Keep a little organized code library of functions that you write. It'll start quite small like maybe opening and writing text to a file. But next time you want to open a file and write text to it, you'll be glad you have that code snippet around that you spent hours writing a month prior.

Have fun with it, that's also important! Involve other people like those in this forum. It's more fun that way, and you'll end up being a little more dedicated to it.

Cheers,
~djc

Koobi
September 7th, 2005, 02:10 AM
i'd say problems solving skills, organizational skills (so that you can organize your thoughts) and a good mind mapping technique.

nobodysbusiness
September 8th, 2005, 03:22 PM
Go read this essay on great hackers (http://www.paulgraham.com/gh.html) by Paul Graham. Come to think of it, read all his other essays too.

LordHunter317
September 8th, 2005, 09:28 PM
You'd be suprised how much you will already know about C from writing PHP code.The only things you'll know about C is some of it's glaring, obvious and annoying limitations PHP shares. Besides syntax (and not even really syntax, more like general structure) there's virtually zero knowledge transfer beyond fundamental precepts.


In terms of Maths and Physics, it shouldn't be neccassary to really be interested in these topicsIf you just want to be a code monkey, no they're not required.

If you want to be a software engineer and actually design applications, then fundamental understanding of math is necessary, because you must understand computer science, which is a branch of math.

Just like EE's must understand the physics behind the components they use.


The other biggie, which a lot of people don't really get, is to be egoless. Be prepared to show your code to others and not to take criticism of the code personally. The criticism is normally targetted at the code, not the writer of the code. If you can take this from your peers and mentors and get better, then you will do well.You've really never worked in an environment with a lot of office politics, have you?

That idea is nice in theory, but in practice... no so nice. But how to live in an corporate world isn't very germane here.

thumper
September 9th, 2005, 09:55 AM
You've really never worked in an environment with a lot of office politics, have you?

That idea is nice in theory, but in practice... no so nice. But how to live in an corporate world isn't very germane here.
Actually yes.

Which is one of the reasons I don't work as an employee but as a contractor (or consultant if you wish). Politics in the workplace has most people trying to cover their ****, or busy trying to hide their mistakes so it won't affect their bonus.

Just because there is politics around you doesn't mean that you have to take criticism personally, and that is the guts of egoless programming. It means that you don't tie your ego to your programs. Sure you might make mistakes, but if you are more open to having your code examined by your peers, and able to take suggestions or changes without thinking "they don't trust me/like me/think I am capable", then you are going to produce higher quality code.

Do you just want to "live in an[sic] corporate world" or are you interested in bettering yourself?

At least as a contractor you don't have emotional involvement with the company, so you are more in a position to write open code.

LordHunter317
September 9th, 2005, 05:49 PM
Just because there is politics around you doesn't mean that you have to take criticism personally, and that is the guts of egoless programming. The problem is, that's just not practical ideal to live by. Not caring when the criticisms are directed at you is a good way to end up without a job.


and able to take suggestions or changes without thinking "they don't trust me/like me/think I am capable",That's just it, they very well may be thinking that, if "they" is your supervisor or boss, then you have to actively work to change those ideals.

Simply ignoring criticisms directed at you, even if it's through the code you write, in many corporate environments is a way to find yourself job-hunting.

Seriously, if someone says (and especially if someone is higher up than you), "Your code sucks," you might as well assume they think less of you know, unless the expectation isn't for you to produce quality code.

I don't think I've ever seen a boss with a positive opinion of someone who produces crap code. I suppose it's possible, but I don't see how being egoless makes you better in any way, nevermind just plain being a viable manner of doing business.


then you are going to produce higher quality code. That doesn't logically follow.


Do you just want to "live in an[sic] corporate world" or are you interested in bettering yourself?Both, but I recogonize the fact that I have to better myself in a corporate world, and that your ideal doesn't line up with that.

jerome bettis
September 9th, 2005, 07:51 PM
:-\"

jerome bettis
September 9th, 2005, 07:52 PM
a knowledge of the operating system and compiler you're using makes a huge difference. you'll understand why your code works, know that the compiler will optimize certain things for you, and have a better grasp on how not to mismanage the resources your program uses..

also proficency with the shell and your editor helps a lot. it's like having a nice clean garage to work in, and you know where everything is.

it's nice to have at least a little knowledge of as many languages as you can, and know which ones are better suited for certain tasks. it's like having a lot of tools in your toolbox, and knowing how and when to use each one effectively. the last project i did i used python, C, bash, and awk to easily accomplish the same thing that many people just used C for. suckers.

LordHunter317
September 9th, 2005, 09:01 PM
To be clear thumper, I agree with what you say about the kind of code you should write: it should be clean, you should do peer-review (which is one of the, if not the best, ways of finding defects), and it should be well commented.

I simply disagree about the manner in which you suggest doing it, or perhaps what you call that manner. Mostly because I've been in situations where I've had code I've written attacked solely because another developer didn't like me, and you have to be capable of defending yourself and understand when a criticism is really personal and not about the code at all.

Though in general, I'm willing to agree that one should understand they won't write perfect code, and be willing to accept critique of it and understand that's a normal part of life. I have no qualms with that. I do have an issue if you try to suggest it should go any further beyond that. If you weren't, then I apologise.

thumper
September 10th, 2005, 04:50 PM
Though in general, I'm willing to agree that one should understand they won't write perfect code, and be willing to accept critique of it and understand that's a normal part of life. I have no qualms with that. I do have an issue if you try to suggest it should go any further beyond that. If you weren't, then I apologise.
I guess that I have been thinking of this from a more experienced point of view. These days if someone says "your code sucks" I expect them to be able to say exactly why, and if they are valid comments, then to take that on board without thinking that they are attacking me.

Now from what I think you are getting at is that they might be well saying "You suck", and that is a whole other bottle of fish.

I am not interested in writing here about inter-personal development or self esteem, although to a certain level self esteem is linked to egoless programming. If someone has a problem with you and is vocallising that through attacking your code, then a way to sort that out is to get them to explain exactly what is wrong with the code, and if they can't really specify it, then yes they probably are attacking you. A whole new topic here...

More of what I am thinking about is to do with design of the system, choice of parameter passing techniques (especially in C++), method names, coding standards etc. Normally if someone is going to point out things wrong with the code along these areas it is normally because you (as the code writer) do not know about it, or the other person might have a fuller picture and hence a better design. The egoless bit here is to be able to listen to the criticism and be able to argue your point, or change. It is this sort of change which can lead to the better code I was talking about. You the coder get a better understanding and are able to remember design techniques or methodologies, reasons for change. This does assume that there was discussion, and that your are willing to listen and learn, and you're not just blindly changing things.

If your manager says "Your code sucks" without being able to explain what they mean, then I'd say you have a ****** manager. Part of the problem might be when you actually really are crap. Then you should really ask a peer group, not necessarily people you directly work with for help. For example the ACCU (http://www.accu.org) is a great resource, most members in the UK although a growing number in Europe and America, or the equivalent of the BCS (British Computer Society), although to be honest, I don't really know too much about them.

If it is really that your manager doesn't like you personally, then that is something else.