6 ms·
Top 10 Traits of a Rockstar Software Engineer
- edw519 19y ago"3. Continuously Refactors Code" Good. At least I'm not the only obsessive compulsive refactorer.
- antirez 19y agoThis is a very good indicator of smart coders indeed, people that don't love to code and are not interested in the beautiful of the code itself will reply "but it already works well, why do you like to modify existing working code?". Of course the reason is that you can make it 1/2 the lines of code (or even better, sometimes it happened to me to reduce a 30 lines existing code function to 4 lines of code), more modular, trivial to understand even after 6 months and more beautiful.
- huherto 19y agoYou are right. There is an aesthetic beauty in code. Even in complex problems it should be clear and simple. I wish more people could appreciate this. Many times they don't see it, (because it doesn't give any problems) or they they see the finished product and think it was an easy problem. They do not know how hard was to find the simple and clear solution.
- wallflower 19y ago"Chapter 1 introduces some of the basic tenets of the book, namely that code is literature and should be read as such. All too often people only read code when they have a specific problem to solve or want to get an example of an API. Instead, if you read code frequently you'll always be learning things and improving your skills. Also, Spinellis discusses the lifecycle of code (including its genesis, maintenance, and reuse), which simply must be taken into account if code is to be good. Poorly skilled developers forget these things and just slap it together, never thinking ahead." From a review of "Code Reading: The Open Source Perspective" http://books.slashdot.org/article.pl?sid=05/03/02/1951204 http://books.slashdot.org/article.pl?sid=05/03/02/1951204 I was reading this book in the bookstore the other day (too expensive to buy). See also: "Beautiful Code: Leading Programmers Explain How They Think"
- timr 19y agoAnother reason to reduce lines of code: every line you write is another chance for a bug (this is the argument that I tend to use to convince people who don't believe in beauty).
- keating 19y agoYou don't just write it correctly the first time? // Mozart
- davidw 19y ago"rockstar" - past its sell by date?
- m0nty 19y ago""rockstar" - past its sell by date?" Yup. The only people I've worked with who thought they were rock stars were, in fact, prima donnas: temperamental, difficult to work with, unlikely to help. I'd hire programmers in the same way I vote for politicians: look for the boring, able, hard-working ones, because they'll be a lot less trouble than the exciting, mercurial, "I'm so gifted I don't have to try" ones ;)
- davidw 19y ago"Dude, you guys wanted a rock star, so why'd you freak out after I smashed my computer after the project was delivered? Kurt Cobain's my hero, man"
- tptacek 19y agoThis definitely does seem like the Top 10 Traits of a Rockstar Java Developer. Agile, unit tested, gang of four patterns, refactored, usability-engineered. I guess my favorite part is that it ends in "knows basic computer science". Yeah, that's good to know. Also, the rest of computer science can come in handy. But definitely, read Getting Things Done and Refactoring first; that'll definitely be more helpful than LALR parsing for getting forms hooked up to databases.
- pg 19y agoFor once I agree with you. This reads like a description not of the rockstar but of the "team player" that big companies look for. Not only are many of the items on this list wrong ("Uses design patterns" should be replaced by "Laughs at the phrase 'design patterns'"), it's missing the defining quality of the really great programmer: Redefines the problem.
- tptacek 19y agoFor your snarky "for once" comment, you owe me a response to this: withholding distaste for the term "rock star", rock star devs: 1. Can estimate accurately. 2. Can solve problems involving graphs. 3. Can frame and solve problems compiler-theoretically, including parsing, domain-specific languages, and virtual machines. 4. Can code bare metal and understand the memory hierarchy well enough to know when that makes sense. 5. Can assess whether a problem is going to be compute bound or IO bound and plan accordingly. 6. May or may not write code that is easy to read ("maintainable"), but tend to write code that is extensible. 7. Understand caching, load balancing, and compression. 8. Can work with large data sets. 9. May or may not formally unit test, but can debug fast and can design code to be debugged. 10. Steal ideas from other strong projects (implying also that they read and evaluate other people's code). Obvious caveats: I'm not one, but lists like this are always biased. "A rock star developer looks exactly like the ideal me!". Like with the original list, I could easily put a book to each of these. A comment thread with nothing but people's lists would be fun to read.
- pg 19y ago
- rugoso 19y agoi thougth your where talking about the grand theft auto "rockstar" company, that would have been interesting ;)
- antirez 19y ago> Uses Design Patterns > Writes Tests > Leverages Existing Code Mmm... moreover the article seems to be a bit biased toward Java that is not exactly the rockstar software engineer preferred language.
- wallflower 19y agoI'd prefer a Ninja software developer :) I cringe at the title 'Software Engineer' coming from an engineering background
- projectileboy 19y agoIn my head I hear "Sanitation Engineer". There are too many parallels to list.
- wallflower 19y agoMy favorite was a technical writer calling himself a Grammatical Engineer (with tongue-in-cheek)
- ardit33 19y ago"I cringe at the title 'Software Engineer' " ---Ha. What's wrong with engineer? I actually cringe when I see Code Ninja, Pirate, Monkey, or whatever. Very juvenile. Sure, I am a programmer, software engineer, I can hack, and all that. But Ninja? WTF? It must be an american thing. Maybe kids in here were raised watching Ninja Turtles, and that's a wait to attract them, but seriously, it is just very juvenile and naive'.
- astine 19y agoThe problem with 'Software Engineer," with me anyway, is the that the title just reeks of pretension. There is an actual field called software engineering and it refers to an actual development style and methodology and is not synonymous with all-purpose hacking. Despite this, many developers refer to themselves as software engineers even if that isn't what they do, simply because it sounds more important. "Monkey," "Ninja," etc may be informal, (I don't know how you mean naive,) but it at least doesn't usually imply posturing.
- alex_c 19y agoI don't know, a ninja is a lot cooler than an engineer, and while I may or may not get away with calling myself a software engineer (Computer Engineering degree), I certainly don't have any stealth or assassination skills... "Ninja" seems like more posturing to me!
- jgrahamc 19y agoDesign patterns?!? Give me a break. A rock star doesn't do design patterns. They use that book as a monitor stand. Knows basic computer science?!? WTF. You don't need to memorize Knuth, but knowing more than basic computer science is pretty important.
- tptacek 19y agoThat book takes an unfair beating. I think I could still lose an argument defending it, but if you really want to consider the concept fully, you have to take into account: - Alexander's "The Timeless Way Of Building", from which it borrows the concept of defining a vocabulary of design based on small, proven ideas applied fluidly --- where the GoF misfired was that Alexander's book has hundreds of patterns, and they only have like 15, which made the GoF patterns seem more brittle and simplistic than the concept they were talking about really is. Go read Alexander before laughing at Patterns. - The extended "Patterns" movement, which can only be an improvement over (gag) OOPSLA --- for a credible application of the idea, see Schmidt's Pattern-Oriented Network Software books. Schmidt (of ACE/TAO infamy) managed to use the Pattern concept to discuss some valuable ideas in concurrency and distributed systems, and I still refer back to those books.
- WilliamLP 19y agoWhat's with this idea of a "Rockstar" developer? Is it just me or is it incredibly stupid. Unless it means: -Is so successful and in demand that he can do whatever he wants, and set his own rules. -Makes a ton of money, at least millions of dollars per year. -Is a household name, at least among some circles. People get excited by a software project just because he is involved. -Has enough social status to get many women. -Uses drugs. I don't think there are many software guys in this category. John Carmack and John Romero in their heyday is what I'd have in mind, or Richard Garriot (I mean come on, he built a castle!), or Sid Meyer. Or Linus of course.
- jksmith 19y agoLots of good comments. Why not add to the list "is a MSFT MVP" or "is Java certified," or some other certificate? This list is a checklist of the mediocrity that the programmer has been reduced to. Everybody is a great programmer now, and everybody uses java or C#, and knows about all the latest skinnable components or whatever. Lower the bar, attract more people to become programmers because they're tired of working in QA and seeing the programmers make more money, provide the clueless bosses with business degrees with simple checklist metrics (like that list), and voila!, a whole industry of books, seminars, cert programs, and finally, Sun and MSFT maintain their mindshare takeaways. This is all part of the shadow industry that props up the hardly legitimate software development industry. That's my conspiracy theory and I'm sticking to it.
- bayareaguy 19y agoThe most essential things on that list are #2 (Gets things done) and #8 (writes maintainable code). If the developer is working on the right problem, those two can be rephrased as "creates value" and "preserves value". A good developer will do all the other things to the degree they matter for #2 and #8 in their environment. Some places need ubertesters and others need polyglots.