The Lounge is rated PG. If you're about to post something you wouldn't want your
kid sister to read then don't post it. No flame wars, no abusive conduct, no programming
questions and please don't post ads.
I've never considered myself a great developer. Even when I left a big company to start my own, where I was supposed to be the Dev-Guy. But I knew I was capable enough. More importantly, I was willing to do the following:
1. Listen to and really understand the needs of my clients. 2. Focus on how to make the UI work most efficiently for the end user. 3. Research to figure out an (not the!) appropriate technology for the solution. 4. Learn whatever is needed to use this technology - even if this is a completely new framework. 5. Work my backside off to get the solution implemented well. 6. Iterate as many times as required on #2 until it was right.
Personally, I think I am a rockstar at #2 and #5. But a great developer - no.
Leaning on the shoulders of giants, and following these steps, we almost always got the job done - for desktop, web, embedded, and hardware projects. And having been in business for over a decade, I guess we have done a few things right. Most importantly, now when I hire, I look for those who are always willing to work hard, learn, and improve.
I can count on one hand how many great developers I have worked with in my long career of 44 years (42 in the corporate environments).
I have lost count as to how many people I have worked with who thought they were great developers but in my view weren't. One such developer actually came over to my cubicle one day and stood there for around 20 minutes telling me how great he was as a trading developer.
Though I have been considered during my career to be a "super programmer", I just saw myself as someone who was very good at getting a job done with professional quality (or at least as much as my technical management would allow).
Many developers today seem to feel that they are good if they know all about DevOps and Agile, have worked in such environments, and have gained a knowledge of all the latest tools.
The problem is that all of this does not make a great developer or even a good one. I have worked with such people and have found them to be mostly meh... Yes, they could put an application together and quote the latest technical jargon. And they could one-up themselves quite well. However, could they get a professional quality job completed with coding that was very easy to read and understand. No.
One fellow I worked with who claimed to be highly knowledgeable couldn't understand one of my application's code-bases when it was left to him when I went on vacation.
My source-code was in fact very straight-forward and eschewed all the latest techniques in OOP programming. The application simply didn't call for it. Unfortunately, this poor guy couldn't understand the code without it being completely object-oriented including inheritance (which is a time-bomb simply waiting to go off if it is not implemented properly).
None of us are really great developers since quality code can come in many different varieties, all of which fulfills the requirements it was designed against. This is not a competition, though many make it appear to be.
What makes you "good" is if you can get a variety of tasks done with professional quality within a reasonable time period. DevOps, Agile, and the latest tools, practically all of which merely reinvent existing wheels that already work quite well, are nothing but distractions.
Besides, no one can keep up with all of this hype that is being promoted all over the industry.
If you do that you are doing just fine...
Sr. Software Engineer
Black Falcon Software, Inc.
If you're delivering good quality software solutions to business problems in a timely and budget friendly manner, then you are probably a good developer. That said - how do you become a great developer?
First - develop your communication skills, both written and verbal. If you can't articulate your questions about the problems at hand, in a manner non-peers (or even peers in software development, for that matter) can understand, you're going to have a tough time delivering solutions. Furthermore, people will question your ability to deliver those solutions, if you can't speak about them in an intelligent and clear manner. So cultivate and nurture your speaking and writing skills. Also, for both, a bit of advice: Think before you speak. Pause, think about your answer or question, then communicate it. Don't just blurt out the first thing that comes to your mind as quickly as possible - some people won't understand it, and in many cases, it will be the wrong thing to say.
Second - develop your skills in understanding the business you are creating solutions for. If you don't understand the business, how will you know if the solution is correct for the problem? Furthermore, how will you know if the solution fits the problem at all, or whether there is a more holistic solution at hand - if you don't understand how the parts of the business fit together. Remember, sometimes the best solution to a problem involves the least amount of code. Also, more code means more stuff to break. Always look to simplify the problems and solutions.
Third - simple code is better code. It may not be sexy, it may not show "the world" your coding prowess, but it will be maintainable - both by future you, and other programmers who come after you leave. Strive to make your solutions as simple, and to the point as possible. Your goal should be writing less code. Your goal should also be to refactor old code to use less code (assuming you understand why the old code does what it does - which may or may not always be clear - don't ever remove or change code unless you know exactly what it was originally doing).
Fourth - don't get hung up frameworks or technologies. If you want to stay marketable, stay flexible: Strive to understand the common principles that underlie those frameworks and technologies. In many cases, most of them are reinventing the wheel - sometimes because of the famous "not invented here" syndrome. Don't succumb to the allure of that syndrome, either (at least with an employer - do what you want on your own time): In many cases, your solution will end up being worse than existing solutions, performing more poorly and doing less. Instead, seek solutions that already exist, and try to extend them, or build on top of them.
Fifth - "Good programmers write good code; great programmers steal great code." Learn it, understand it, and live it. Furthermore - always give credit where credit it due. I'm not saying all answers are found on Stack Overflow, but you need to know how to frame a question when searching for an answer, and how to look at those answers you do find in order to understand whether they are valid and can work in your situation - or can be made to work. Cut and paste won't get you very far before it bites you, but sometimes the answer to a difficult problem can be found online with proper searching, understanding the problem, and knowing how to fit the answer pieces together into a final working solution.
Ultimately, never rest on your laurels - keep striving to improve your knowledge. Ideally, study old solutions (for instance, in the field of machine learning, you wouldn't believe how many algorithms and other solutions are based on things created or discovered 40-50 years ago). Never fear to venture outside of your comfort zone - if something seems too difficult to learn, then it is probably the one thing you should try to learn. Pushing yourself on new skills is what will really set your knowledge and imagination free.
Finally - don't be afraid to fail. When you do, pick yourself back up, reassess the situation, and give it another go.
I had thought about this question for myself a few years back. I, specifically, like the answer by Jon Mckee. Looking at the technology landscape 15 years back and now, there has been so much of change and the way it has evolved. Its practically impossible for any developer to keep up with a lot of these new technologies. And, unfortunately, a lot of companies that use these technologies are run by people who know how to do business & make money very well, but not really much about these technologies. Hence, comes the trend of picking up the popular technology in the market and using it for their requirement. Its a really complex world to be wondering about these things or summarize them in a paragraph for that matter.
This may be a little late but now that it has been out in the wild, rampaging around and causing untold damage and misery, why would anyone downgrade to Windows 10 from Windows 7? (I can see why for Win8 to WinX, but not from Win7).
I am looking for good, solid reasons; not just "it's better" or "it's better on tablets" or "it's got a cooler UI" - none of which are, in my opinion, even a little bit true.
These need to be reasons that couldn't have been implemented with a quick update to Windows 7.
...and don't give any of that bull about it being more stable, because it clearly is actually less stable!
...and I don't care that it starts up faster. I rarely have to restart Windows 7; it runs for months on my desktops and laptops (with no hibernation/wake-up problems, ever).
- I would love to change the world, but they won’t give me the source code.