What do you think makes a good developer? Do you think that anyone can be a good developer? What is a great developer then?
What do you think makes a good developer? Do you think that anyone can be a good developer? What is a great developer then?
John Bunting
is talking with
Chris Haseman
✖
John McDowall
✖
Ioannis (John)
✖
Girish Rao
✖
Dain Miller
✖
Taylor Baldwin
✖
Sleepyfox
✖
Nathan Piper
✖
JuanMa Ruiz
✖
Sylvain Reiter
✖
Daniel Lobato
✖
Ian
✖
Luca Pinello
✖
This link from my blog is what had me revisit this. I think I want to stress a bit that the very best developers I've ever met, get up everyday, excited to build cool shit for people who they've never met.
blog.johnbunting.me
I think qualities like wanting to build cool shit, drawing inspiration from others, building for the long term, stem from more fundamental characteristics.
Curiosity is a big one. Curiosity means continuously learning - about the world, the problems that your users need solved, how that new framework works, whether your unit tests do what they're supposed to do. Questioning how things work enables you to build a more accurate model of the world and subsequently makes you adept at making good decisions about the world (and your code!).
I definitely agree with "open mind"/"beginner's mind" comments by Ioannis and John M.
Also important are objectivity, discipline, skepticism, and tenacity. These lead to good practices and great engineers.
I think a good developer is made up of a number of things: Attitude, Inquiry, Passion, Drive, and Love for programming. In my experience working with devs in the past, the people I enjoyed my time with were ones that cared about the little things. They cared so much about what text editor they were using because it wasn't just a day-to-day chore for them to write code; it was a passion. In short; they cared. They cared a lot. That's what matters to me. If you write a thousand lines of JavaScript as a contractor and get paid a lot for it, well...that just doesn't matter to me at all. What matters are the people that really push the boundaries, and really care. In summation; long live the open source communities.
I wrote a post about this ages ago, but here's what I look for when hiring:
-Trust: can you hit your deadlines or let people know when they're going to slip.
- Communication: Can you explain what's going on both to other programmers and managers
- Humility: can you hear the criticism of your work and make it better as a result.
- Code: Do you speak it.
Paul Graham made a great presentation about this topic at OSCON 2004 called "Great Hackers" - paulgraham.com
If you get the chance listen to the audio of the presentation, Paul's a great presenter - (look for the tiny 'play button) itc.conversationsnetwork.org
I thinks good developer is the following:
-Passionate and always interested in finding better ways to solve a problem.
-Has a broad, evolving set of technical skills, encompassing many different languages and frameworks. Not just "one year's experience repeated 10 times".
-Has just enough foresight to design and develop modular code with just enough abstraction to support possible future requirements, without it being overly complex or wasting time on something that will never be needed.
-Well grounded and recognises that they don't know everything and that they can always learn something from other developers.
-Leaves the codebase in a better state than they found it.
Agree with @_dain and @nathanpiper, all are required. I would also add that an "excellent" developer also needs to understand User Experience and meet clients! Even with the best technical specs from the UX team, there will always be room for judgement and this is where a great developer will make a difference, applying common sense and building something easy to use for others.
About meeting clients, it will be the role of the project manager but I always like to bring a developer along so he/she get the feel of WHY we are doing it, will better understand the brief and deadlines, which makes it less stressful for the manager to convince them on why something is important or needs to be delivered tomorrow!
Honestly there are a lot of traits that make a good developer. If I would have to list them, they would be:
- Communication
- Business savviness
- Expert knowledge of (at least):
:Discrete Math
:Data Structures and algorithms
:Compilers and automata theory
:Security
:One or two software development methodologies
:Clean code and refactoring
:Humility
:Deep knowledge of one programming paradigm (OOP?)
:Decent knowledge of another paradigm (functional?)
All that specific skills plus a genuine interest to tackle hard problems, a playful mind, a sense of never knowing it all and some willingness to always go beyond her skills and improve day by day.
Now you take this home, throw it in a pot, add some broth, a potato..
But what is a developer? A guy/girl who type code all the time? (js, jsp, php, c++,..) or someone who can make a website (project) completly?
If you consider that a dev can design a web or and app with photoshop, gimp, corel (whatever) and code it, don't you think it's more than dev?.
I think a developer can only code but he must to be, overall:
* Passionate and always interested in finding better ways to solve a problem. (@nathanpiper).
* Humilty: you're no good.
* A good chef.
Links:
- About what do you need to became a webdeveloper:
- What do you want to learn today? simplyzesty.com
While I generally don't like Perl (for its implicit magic), Larry Wall hit the nail on the head with his "laziness, impatience and hubris" quote about good programmers. It really jusr restates some of what has been said above, e.g., laziness would be akin to using the right level of abstraction and modularizing the code while impatience ensures the project will be delivered on time. Finally, hubris is writing good documentation, unit tests, and making sure the code doesn't just communicate to the computer but also to other developers.
One thing I haven't seen mentioned is the ability to see the forest and the trees, i.e., be able to see the project as a whole and care about the little things. A good developer needs to see both.
A friend of mine put it very well, that being a good developer comes down to having good taste.
There are always many ways to do things. Do I store plaintext passwords, hash, salt, split in the database, across multiple hosts, etc? Do I make my application multithreaded or just block the main thread waiting for network access?
Having taste with programming means not compromising, not doing something because its the quick solution, but writing high quality, well planned and executed code that is coherent for users, other developers, or others who interact with your product.
I'm a computer science student, and on my course we are all taught how to code, but it takes real experience with good mentors to leane the tasteful way to code.
Thanks for your feedback! Team Branch
Please refresh the page and try again.