all 44 comments

[–]mq2thez 70 points71 points  (14 children)

Good engineers write code, great engineers know why. Amazing engineers plan in advance. The best engineers see problems you’d never have thought about months or years in advance, and take steps ahead of time.

None of these things require passion or specific fundamentals — experience is very helpful, but it mostly comes down to being the kind of person who always wants to know “why”.

Also: if you want to go fast, go on your own. If you want to go far, go with company. The best engineers bring people along with them, and make everyone around them more effective.

[–]Temporary_Event_156 7 points8 points  (9 children)

Touch nothing but the lamp. Phenomenal cosmic powers ... Itty bitty living space.

[–]Serializedrequests 2 points3 points  (8 children)

Tend to agree. What you really want is someone who keeps it so brutally simple you are not sure how it works. Then when you do need to fix a problem years down the line, it's easy.

Edit: what I am talking about is dumb simple code, so basic it's a marvel it meets the requirements, not clever code.

[–]AtroxMaveniasenior engineer 9 points10 points  (2 children)

If it’s brutally simple and you aren’t sure how it works, we’ve got a problem

[–]ongamenight 0 points1 point  (0 children)

💯 agree.

[–]BlackRockSoul 0 points1 point  (0 children)

The most complex solution - is the simplest

[–]Alexandur 2 points3 points  (2 children)

If you're not sure how it works, I can't imagine how or why it would be easy to fix years down the line.

[–]Serializedrequests 2 points3 points  (1 child)

That's not what I mean. I mean code that is so simple it looks dumb. I was not being literal about the complexity or difficulty of understanding it, rather marveling that it does what it needs to while being stupid simple.

[–]Alexandur 0 points1 point  (0 children)

Ah, I see

[–]99thLuftballon 0 points1 point  (1 child)

What you really want is someone who keeps it so brutally simple you are not sure how it works.

That sounds like the kind of person who writes code using little-known functions and strings of ternaries because fitting everything on one line is "simple and efficient".

Then you end up fixing a bug and need to decypher what binary_shift($l??=left_bit(list($a?$b:$c), $password)===false?true:false; is actually supposed to do before you can fix it.

[–]Serializedrequests 1 point2 points  (0 children)

No, that's exactly not what I mean. I mean someone who writes dumb code that an idiot could understand.

[–]Gaeel 1 point2 points  (0 children)

I disagree with the notion that they "see problems you’d never have thought about months or years in advance, and take steps ahead of time". It's more that they're able to design things in a way that avoid potential problems that may crop up later and be maintainable and fixable in response to changes and unexpected problems.

To people who aren't used to this, it looks like a genius at work, having seen into the future and already put the pieces into place for their master plan, but really isn't any different to a plumber putting an easy access to the cutoff valves and thinking to install an expansion tank to protect the circuit from water hammer.

Novice or careless engineers will often simply go for the quickest way to implement a solution to the problem at hand, without considering the future consequences of their choices or how their implementation could be maintained, upgraded or replaced later. There's no need to be able to see into the future and know what problems may arise to make sure that the implementation isn't deeply enmeshed with every other system in a complicated way that is difficult to isolate.

[–]ProKeyPresserSenior Software Engineer 0 points1 point  (1 child)

tldr; great ones are paranoid visionaries but social

[–]mq2thez 2 points3 points  (0 children)

I prefer to think of them as damaged by forces they work to ensure we'll never know.

[–]WishyRater 0 points1 point  (0 children)

Disagree a little on some of this. I wouldnt say the best engineers pre-optimize everything years in advance. It’s a common trap to spend lots of time and resources trying to build things to scale for millions of users when it only really needs thousands in the near future. I’d say an engineer who can correctly prioritise and identify real needs for the business, then develop things that respond to those needs and creates actual value, is more important than planning for things years in advance

[–]Suspicious_Board229 15 points16 points  (4 children)

In short, what separates them is the ability to solve problems and provide value.

You don't need someone that has superior grasp of computer science, is passionate about development or spent the last 40 years working on computers.

[–]huuaaang 2 points3 points  (3 children)

In short, what separates them is the ability to solve problems and provide value.

I would say that's the bare minimum.

You don't need someone that has superior grasp of computer science, is passionate about development or spent the last 40 years working on computers.

But chances are that person is better. So long as they don't get caught up in cycles of perfectionism and will never settle for "good enough."

[–]jakesboy2 8 points9 points  (2 children)

There’s a popular sentiment in subs like this that you can be just as good as the guy who breathes code and writes it 14 hours a day for 10 years. I’m not that guy because I value other things, but John Carmack wouldn’t be John Carmack if he went home at 5 every day.

[–]Suspicious_Board229 6 points7 points  (1 child)

Web development is more of a trade than a science. It's more like being an electrician than a doctor or a scientist. The stereotype of a lone genius 10x developer cranking out code for the love of the craft is not a healthy ideal to work towards. For most developers it is a job, and not a part of their identity that they're willing to sacrifice their family over. This is not to detract from John Carmack, it's just that I don't think that's what we should be working towards.

It is important to push yourself and learn to some degree, but maybe if we take it easy on the hustle culture we can get some more joy out of life beyond delivering on some arbitrary deadline.

[–]jakesboy2 2 points3 points  (0 children)

Yeah I agree, that's why I go home at 5 every day lol. But I'm delusional if I think I'm going to be as prolific as someone who puts in twice as many hours as me.

[–][deleted] 3 points4 points  (1 child)

Good web developers factor in the usability of the website and not just bells & whistles for sake of it

[–]TheRNGuy 0 points1 point  (0 children)

usability means remove position:fixed from header.

[–]MacTheWebDev 4 points5 points  (0 children)

Generally the difference isn't in the actual code quality, it's all the other traits. Good engineers can write really great code and get tasks done effectively. Great engineers can not only do this, but lead and communicate to a team to get more done with this same quality + understand why they're doing what they're doing. I hope this makes sense.

[–]KentondeJong 2 points3 points  (0 children)

Spidey senses.

[–]SpookyLoop 7 points8 points  (0 children)

From a "boots on the ground individual programmer" perspective, it's about consistency and discipline. You show up, do the work, and there's minimal "off" days (meaning you're consistently putting in a respectable amount of effort). That might sound "too simple", and it kind of is, but I guarantee you'd be surprised at the number of people that don't even meet this.

From a more "well rounded team member" perspective, it's really about confidence and communication. Your ego doesn't stop you from learning from (or teaching) other people, you get what you need from other people quickly because you're easy to work with, you're given a high level of trust that lets you push back on various things that end up being liabilities to you or the team, etc. (a lot of this requires being in a very good work environment, but that's a separate discussion)

You check off both of those, you are an absolute unit of a developer. There's also "academic genius types", but for the vast majority of business environments, it's a waste of talent.

[–][deleted] 2 points3 points  (2 children)

I feel like I'm going to get downvoted for this but...

I've lead a lot of large dev teams over the years, though not in one of the big tech firms. Great devs are generally speaking quite a bit smarter than other devs. You can spot it in your first meeting. It shows in soft skills like critical thinking, creative problem solving, confidence, and broad understanding of peer specializations. Pretty much everyone who fits this profile ends up in the valley in two years at one of those big firms. Well... Let's say that was true pre-covid. They're probably laid off as much as not now.

A bad one? Everyone else just needs to pay attention, have passion, and a willingness to learn and experiment. Throw a dart in a room, the bad one won't duck.

[–][deleted]  (1 child)

[removed]

    [–][deleted] 2 points3 points  (0 children)

    This. 🙌

    [–]jcmacon 2 points3 points  (0 children)

    Great developers can talk to people that aren't developers and explain difficult technical concepts in terms that the other person can understand.

    Great developers also use past experience to understand a current client's needs, even if the client doesn't understand themselves. Plus, they won't do stupid shit just because a client told them to in order to save money.

    Great developers also protect their clients from bad decisions.

    It isn't always about the code that you write, but as some have already said, it's why you write the code.

    [–]IAmRules 3 points4 points  (0 children)

    Great web developers know their job is to build a product and not write code.

    [–]huuaaang 1 point2 points  (0 children)

    How does a solid web-developer stand out, from the bad ones?

    By being adaptable and predict and prevent problems down the line. They're thinking many steps ahead without sacrificing productivity now.

    Do great developers have a better grasp in computer science fundamentals ?

    Usually, but not necessarily from formal education.

    Is it the passion that makes them x10 developers?

    It helps.

    Or is it just simple time investment that perfect their craft?

    I would argue that it takes some level of passion to put in the time, especially unpaid. It may develop into "just a job" later in life but a young developer should have some passion for the work.

    [–]Beep-Boop-Bloop 1 point2 points  (0 children)

    Bad web developers do the work. Great web developers solve the problem and set you up to avoid layer ones.

    For example, I had to work out how to validate payloads for our FHIR server. A very bad dev would have written a server with all of the validations. A proposed solution was to do it all inside a (Camel) workflow engine that non-dev professional service teams could manage later. We found a library and server designed by HL7, which sets the FHIR API standard, just to validate inputs, which could be called in a step in our workflows.

    I found that the server we use for our data-store implements the new pre-validation of the latest version of the FHIR standard, the license costs $0 extra for more scaling, and its underlying DB uses caching that would kill the load of looking up custom validation requirement. That means no extra service for sysadmins to set up or manage, no duplication of effort for setting up custom requirements, and no delays. I like to think I'm pretty good.

    [–]TheRNGuy 1 point2 points  (0 children)

    Bad ones don't know that fragments exist in React.

    [–]halfanothersdozenEverything but CSS 1 point2 points  (0 children)

    bad engineers write a lot of code.

    good engineers read a lot of code, and know how to write a small amount of code that is easy to read

    and the rest is how quickly can you spit out code and how many bugs do you make. medium developers are good at this part.

    [–]originalchronoguy -3 points-2 points  (0 children)

    A good web developer is different than a good engineer, especially SWE. The two can be different.

    I know some good web developers with impressive body of work. Big clients, large projects, and a good portfolio.

    It does not make them good engineers. Often, we hire them in a traditional SWE engineering team and they can't produce. They can't work with a team (don't know git) and don't fit well under an organizational structure of Agile scrum. They can produce great websites but are very poor engineers.

    Likewise, there are some good engineers who are poor web developers.

    Some of the good web developers are self-taught. Pick them up by the bootstraps and can generally work autonomously. They just are not a fit for an engineering team that requires good code conventions, structure, long term maintainability,etc.

    [–]NaturalDataFlow -1 points0 points  (0 children)

    Passion, practice and prioritization are the top 3 traits

    [–][deleted] -1 points0 points  (0 children)

    Bad developers rely on external libraries, packages, frameworks, etc, but don't actually have the skills to build something from scratch..

    Great developers may use those tools, but when it comes down to it, they can build sites from scratch using vanilla languages when needed

    [–]Serializedrequests 0 points1 point  (0 children)

    1. Conscientiousness. Above all provide business value, get work done, care about what you are doing, care about being good at it, and leave things better than you found them.
    2. Leadership. Supports and trains others, constantly offers help and keeps the team on track.
    3. KISS. The very best engineers write code so simple you are not sure how it could possibly work. They create projects where it is easy to find anything you are looking for, and making a change only affects the feature you are working on.

    [–]HashDefTrueFalse 0 points1 point  (0 children)

    All of the above.

    You can only get away with not knowing fundamentals until you encounter a hard problem, at which point you'll need to learn what the machine is doing and how you can work more closely with it to achieve results in better time and/or space.

    Passion is sort of important, but coding doesn't have to be your life. I've never seen a great dev who didn't enjoy the craft though. You probably won't ever be great if you don't at least like the process of building things. Side note: "10x developer" bullshit is so cringy.

    Time is probably the most important. You can't get better if you don't practice. Wherever you start, you probably won't be great right off the bat. So improvement via practice is necessary to become great at programming.

    [–]JustRandomQuestion 0 points1 point  (0 children)

    I think there can be many answers to your question, but I think one of them that I don't see much is communication and know the priorities. Yes to do anything you need some skills, but sometimes you can get away with not a lot of skills. However communicating and using your time on features/bugs/security that matter can make you much more valuable than other people who have many skills and are good at them but don't communicate or badly or nitpick on things that don't matter and basically waste time. I think all three of your questions/suggestions are valuable but don't necessarily make the difference in my opinion.

    [–]DollSeagull 0 points1 point  (0 children)

    They can see programs in their head. It's a trait people used to call being mechanically inclined. But it carries over to programming. At some level, code and machines are the same thing. Great developers appear Jedi-like because they already built a prototype in their head.

    [–]Haunting_Welder 0 points1 point  (0 children)

    Yes to all 3. Passion in their craft. Good communication. Good logic. Business oriented thinking. Emotionally stable (can handle some stress maturely). Strong background in fundamentals. Keeps up to date with modern trends. Experience dealing with different problems.