HACKER Q&A
📣 abdabab

What does mastery look like in software engineering?


When you think of someone who has mastered the discipline of Software Engineering what comes to your mind?


  👤 itsmejeff Accepted Answer ✓
I’ve been pondering this a lot lately, as an engineering leader.

Masters in my organization have an extremely high ratio of value shipped to hours worked.

This means two things. They are able to discern and avoid work that does not provide value (this is often their greatest skill), and the best ones can direct a whole team away from large swaths of work that is not valuable. And they are able to build systems such that the cost of adding more value to the system remains constant as the system grows in complexity.


👤 dumbfoundded
IMO it's about understanding the solution curve in the problem space. Every problem type has a range of possible solutions. Most of these solutions are wrong and a few are correct with different tradeoffs. When you can't do better without making tradeoffs, you're on the curve.

Novice engineers will struggle to get something done. Intermediate engineers can get things done but fail to see the tradeoffs. Expert engineers can identify possible solutions with different approaches.


👤 jasonpeacock
Consistently and reliably delivering good software solutions.

Just like a master woodworker would consistently and reliably deliver good furniture.

Or a master author would consistently and reliably deliver good books.

The key points are:

* Consistent - It wasn't just a fluke or luck, you know what you're doing and can repeat it.

* Reliable - You know how much effort it will take and can deliver it.

* Good - It's not crap, people want it.


👤 codingdave
I don't think there is mastery in this work. I've been doing this for decades, and I still think my code from 6 months ago is crap, no matter how much I learn and improve.

Mastery would imply that you can do it all, and do it right, on any project, and there is just too much change and evolution for that to ever be true.

My goal is simply that I continue to improve.


👤 fancythat
Look no futher than this: https://archive.is/NCWmz (Wolfenstein 3d iPhone development By John Carmack, Technical Director, Id Software)

To be exact: "The developers came back and said it would take two months and exceed their budget.

Rather than having a big confrontation over the issue, I told them to just send the project to me and I would do it myself. Cass Everitt had been doing some personal work on the iPhone, so he helped me get everything set up for local iPhone development here, which is a lot more tortuous than you would expect from an Apple product. As usual, my off the cuff estimate of "Two days!" was optimistic, but I did get it done in four, and the game is definitely more pleasant at 8x the frame rate.

And I had fun doing it."


👤 GistNoesis
I think of tool makers.

Software engineering, gives you some degrees of freedom, therefore it's kind of an art form. Therefore mastery is about intent and the ability to realize it.

In this canvas, you can ask yourself, is the bearer wielding the tool or is it the other way around.

For me a proficient tool user is no master until he makes his tools his own. He can become one either by creating them, or by understanding them deeply enough that he could recreate them.

There are then various levels of mastery and mastery over various sizes of domain. Levels are more about the capacity of imagining new tools, and having new visions in order to advance your field in some interesting way. Growing domain size is about trying to have bigger and bigger tools while still retaining control over them.


👤 jugjug
I think of Rich Hickey [1]: helping others to understand the code faster by identifying and removing most of the accidental complexity.

[1] https://www.infoq.com/presentations/Simple-Made-Easy/


👤 lackbeard
Example masters: John Carmack, Jeff Dean, Bram Cohen. What do they do? I think they're all extremely effective at getting things done. So be smart, hard working, and laser focused on shipping.

A long time ago I saw a good talk by Jonathan Blow wherein he made a point that really resonated with me. The point was that to get good at programming you need the experience of shipping a lot of programs and thus you should optimize your career around shipping as many good programs as you can. Contrast this with the common advice of being an expert in databases, or distributed systems, or OOP, or testing, or something like that...

Edit: found the talk: https://www.youtube.com/watch?v=JjDsP5n2kSM


👤 mvanga
https://bellard.org/

Clean, well-documented projects showcasing demos that end up having huge impact. Some of these projects single-handedly spawned entire tech ecosystems. (see FFMPEG, QEMU, JSLinux)


👤 corytheboyd
Just rattling off some thoughts of my own

* Consistent delivery of quality work

* Instead of complaining about bad requirements that threaten system integrity, happily works with stakeholders to compromise on them accordingly

* Can consistently describe every detail of every bit of work they have done, and answer any curveball questions about it too

* Succinct and to the point, doesn’t bog down meetings with tangential arguments and what-aboutisms

Could probably keep going but that’s good for now haha. I know I don’t even satisfy all of these points myself at all times, but I certainly try to!


👤 kmclean
I like Mozilla's descriptions of increasingly senior roles. https://twitter.com/Gankra_/status/1046438955439271936/photo...

👤 arensc
Hey So I view Software Engineering as a multidimensional optimization surface where you have to optimize for a goal by choosing an axis and playing with those axis until you get a desired result.

Mastering the language but understanding why the language was developed what problems it looked to address.

Reducing the cognitive load of the design using the language.

Understanding the fundamentals of the types of applications you will be building. SCRUD Architecture Apps Streaming Architecture Apps and Games which are usually a combination of both.

Software Systems from first principles are read and write systems. How do you represent that as a program and reduce the complexity?

How you view software engineering ? and explain it to others what is the method of representation you use to encode software as plumbing? is it text based? time flow graph node based? stack based ? binary based ?

Software engineering as a team sport, how do you get a bunch of developers to reduce the cognitive load manage the relationships and data in the code and how do you measure that like a science.

I am also sure there is a lot of valid advice here as well. This is how. I see it from a mathematical / science perspective that pushes pragmatic narrative.


👤 knadh
Mastery is difficult to quantify, especially in terms of code or engineering cleverness. I think, what comes close, is the ability to get way more tradeoffs right than wrong, to hit an optimal balance. Tradeoffs in decision making when it comes to picking technologies or languages, or a certain design pattern, or an architecture, or UI/UX or whatever, when building systems. Small tradeoffs that may not look like much immediately, but pay off in the long term. Sacrificing a seemingly good feature now to avoid the pain of technical debt in the future.

Many of these traits are fundamental, universal, and even philosophical, than is general perceived, and transcend technologies and stacks, and to a large extent, time.

And yet, I think, the above traits can be described as good, and not really mastery in its truest sense, like in other disciplines like music or painting. Software engineering is way too diverse, fragmented, chaotic, and ever changing.


👤 habosa
I don't think there is one answer but there are a few things I have noticed in my short career so far:

  * I think an intermediate level of mastery is when you realize that a computer is a logic machine built to serve humans and it will always listen to you if you're willing to put in the effort. You can always go a level deeper. Great engineers know all of the tools at their disposal and will bend the computer to their will if they need to. At the same time, they know the difference between a great low-level solution and a shoddy hack.

  * Our industry is one of the few where we spend the majority of our time fixing our own mistakes. We call these mistakes "bugs" but they don't just appear, we produce them. The best engineers produce fewer bugs than they fix and rarely end up in a "whack a mole" situation where fixing one thing breaks another thing.

👤 kcorey
Software Engineering doesn't exist in isolation.

You can't master Software Engineering without mastering interfacing with the rest of the organisation.

I don't care how intellectually pure your implementation is or how fast you deliver things. If it can't easily connect to, use and get used by the rest of the business, it's a folly.

A master of software engineering delivers what the business needs in the minimum time possible.

Some businesses care about maintenance. Some don't.

Some care about UI/UX, others with a trapped audience don't.

Some care about efficiency and optimisation, others don't.

You can't be a "master" until you have a sense of what your business is interested in. Not what it CLAIMS to be interested in, but really cares about.

It's been different in every company I've ever worked for.

Good luck.


👤 adampk
An opinion from a Product Manager: When you truly "trust" the engineer. You know their opinions are honest and well thought out. They do not have junior dev energy of saying "two days!" optimistically and not old beard energy of "it can't be done, you won't be able to launch it".

"Master" really is a great word for it, you have complete faith in the individuals word.


👤 throwaway889900
Fabrice Bellard, the mind behind FFMpeg and QEMU.

👤 breck
Pay attention to who was the lead dev on the code you are using. When you see that you are using 2+ (sometimes 5+, rarely 10+) projects from the same person, then you've found a master. Start looking closely at what they are doing, what they are reading, what they are saying on their blog, twitter, etc.

I think of Linus, Lars, Anders, TJ, Rich, etc


👤 Bandrsnatch
Mastery in Software engineering is the ability to conceive and design a program or app in ones mind and then build it and have it work flawlessly. In my experience when a company wanted something done they set up a small team offsite with little corporate oversite. This is why small startups drive innovation. Simplicity is genius and is often seen by users as magic.


👤 milchek
Is it possible? Maybe if you say a specific language, yes, but even then, there are new versions or iterations where whole new features are introduced.

Mastery in software engineering needs to be defined very specifically.

An example, I used to build Flash microsites, campaigns and games for an ad agency. I had a very good grasp of the tech, built projects for large clients etc. If you looked at me at that point in time you could say I had mastery, but now Flash is gone, and I didn’t switch over to React and other web based tech soon enough so my “skill” is lesser than someone who purely started in that domain.


👤 EliRivers
Amongst other signs, they make it look effortless by identifing problems long before they become problems and taking small steps now to make a better future in a few months time.

I don't see them engaged in "heroic" coding marathons to desperately get something fixed or delivered; they already fixed it weeks or months ago.


👤 snarkypixel
Ironically, it's often when there's no mastery that you realize what mastery is. (I.e. when things just work, are shipped on time and are easy to maintain, there's not much fanfare about it)

👤 AnimalMuppet
Handling errors rather than ignoring them.

Knowing that the correct answer to almost every question is "it depends".

Knowing how to somewhat-less-inefficiently produce larger-scale software that adequately meets the need. (Note that I did not say "efficiently", and I did not say "bug-free".) This takes at least some skill in dealing with people, not just computers.


👤 bumbada
The ability to master complexity.

A master will be able to understand the relationship between systems so he can reduce combinatorial possibilities and reduce complexity to a minimum.

In other words, a master will not shoot herself in the foot. She will also not let others shoot themselves in the foot.

Then, depending on what you do, you will need technical ability: -Understanding basic physics or economics or whatever you interface with your software. -Understanding of low level systems (assembler and C) -Understanding of different paradigms(objects, functional) -Understanding of very High level systems (Lisp, Haskell) -Understanding of serialization(parsing and binary) -Understanding communications. -Understanding data handling. -Understanding interfaces(like command line, desktop or Web). -Understanding standards.

But this depends on the particular work you need or want to do. You will be stronger or weaker in different areas.

But complexity handling is common to any area in engineering.


👤 trestenhortz
It’s fiction. No one is a master. There’s always stuff to learn.

Competence is a better term. What it looks like is being able to make things happen quickly with minimal errors or problems.

Unless you’re talking about the most extreme cases ..... Fabrice Bellard and John Carmack .... genius developers who are true masters. There are few of these.


👤 varikin
I recently got a masters in software engineering, not that this means I've mastered the discipline, but I think it set a decent idea of what is important.

Here's a incomplete list of topics that I is worthwhile:

Creating a data schema (sql, no-sql, api based, whatever). This seems simple and obvious, but it becomes very hard very fast, especially when you need to model a complex subject that you know nothing about. Consider being hired by a hospital to model their records, or an insurance company. You need to talk to many people and understand how everything they say and do relates to everything else.

Project management: You may not want to be a project manager, but you should familiar with scrum, agile, waterfall, lean, and kanban. At least you can have an informed opinion when you argue for or against how things are done.

QA: You should know how to write a test plan for a large feature or application. This includes unit tests, manual testing, deciding what areas need more effort because getting it wrong is very bad and what is less important. This may include security and performance testing.

Architecture and design: How would you design a new application? How would you add a new feature to an existing application? How do you communicate this design to a team or many teams?

How to evaluate new things like languages, tools, libraries, technologies, etc. This isn't just reading a couple blogs, this is doing small scale test, proof of concepts, looking at the code to an extent, getting opinions for others you trust.

Finally, communicating. Software engineering is a team sport. You need to know how to write design documents, test plans, maybe architecture plans, progress reports, etc. If you can't effectively communicate your designs, plans, or even why someone else's thing is bad or good, you won't be able to convince others that you are right. And remember, you need to not just convince your peers, but also non-technical people, such as managers, VPs, and many other.


👤 jonathanstrange
Masterful code has some kind of straightforward simplicity. Every function does one thing and does exactly what it is supposed to do. Everything is very predictable and boring. You can see from the code how clearly the programmer was thinking and how well the program structure was planned.

👤 smoyer
That's an interesting question and I'm going to give you a somewhat snarky but truthful answer: Software mastery is exhibited by the code that I wrote today - and oh how horrible it is to look at what I wrote six months ago.

Through-out my career, which is now over four decades if you include the software I wrote as a teenager (before I got paid to do it), I've continuously found a better, more elegant (which can almost always be read simpler or clearer) way to tell the computer what to do.

So my non-snarky view-point is that there's no such thing as mastery but rather that it's the proverbial journey. There is however a baseline at the other end ... if it's not functional and maintainable, there's a definite lack of mastery.


👤 Daub
A simple requisite of mastery in any domain is age. Not to say that young people can't be brilliant and impactfull at their craft. But such qualities fall more rightfully described as having flair. The difference between mastery and flair is that the former is more reliable and stable.

As an art teacher, I have seen many young artists go on to have great careers shortly after leaving school... but most of them burn out or fail in one way or another. Conversely... their aged teachers have acquired character, depth and stability but have in the process lost their wildfire.


👤 l0b0
Some acceptance tests for a software engineer:

- Should know many tools to the level where they know their strengths and weaknesses. This allows them to select a useful collection of them for any new piece of work.

- Should produce incremental project changes which all either improve the value or reduce the cost.

- Should balance all the improvements to produce useful, working software with a reasonable cost. For example, producing super-secure software with no useful features, featureful software with a bajillion bugs, or bug-free software with a gigantic cost are all bad.


👤 abeppu
When is "mastery" a meaningful concept for a field of endeavor? I think we wouldn't believe it makes sense to "master" physics or math, because the advanced work in those fields focuses on open problems. Even if one understands classical physics well, one cannot make specific predictions about medium-sized, low-ish energy systems like a double pendulum. Can anyone claim to be a "master" of an area in which there are such large known gaps in everyone's knowledge?

Though in software engineering we have a lot of prior examples of successful and unsuccessful projects, we also have lots of open frontiers. And in some ways, it's much harder to "know" that an engineering approach or paradigm is "right" than it is to know that a theorem is true.

How can we make types track the "important" invariances of a system? How can we convince ourselves that a distributed system can guarantee certain properties, or that a modification to that system doesn't break those guarantees? If I build a homomorphic encryption system as a service, how would I build debugging tools for it? Acknowledging the halting problem and its cousins, when can static analysis tools make useful, meaningful predictions about programs?

In the bronze age, you could build an impressive stone tower. Sometimes you could even make it stay standing. But I don't think there were any master civil engineers.


👤 gitgud
"Software" is the implementation of logic. "Engineering" is solving problems with science, within a set of constraints.

Therefore software engineering, is solving problems with logic, within a set of constraints.

Where constraints can be; business requirements, hardware limitations, development time limitations, performance limits, solution simplicity, release frequency... Etc

Mastery of software engineering is efficiently solving problems, and optimising for the constraints that matter...


👤 Sevii
I'm somewhat doubtful that 'mastering' Software Engineering is possible.

You wouldn't ask what it looks like to master the practice of medicine today because there are dozens or hundreds of specialities and roles all of which contribute to medicine.

Firmware engineering and 'agile' website development are very different practices with different assumptions, requirements, etc. I wouldn't expect someone to master both web development and video encoder development just like I wouldn't expect a doctor to be a master pancreatic surgeon and develop vaccines.

On the other hand there is a 'journeyman' level of software development and engineering skill that carries over between different development areas. It's definitely not algorithmic interviews though.


👤 DarkWiiPlayer
I'd say the key point is the ability to identify and reason about complexity.

Figuring out what the irreducible complexities of a problem are and at what tradeoffs these complexities could be addressed in different components of an application (including handing them off to the user).

A few corollaries of this are:

- Masters will write less code, as they will eliminate most of the complexity when there is time for this.

- Masters can more easily put the complexity where they want it, having more control over trade-offs between performance, usability, flexibility, etc.

- Masters will have an easier time estimating the required work needed to implement a project, as experience gives them a good intuition for what the irreducible complexity of a problem is.

- Masters will rarely tell you a "right" solution except for simple problems. Their answer will depend as much on your specific requirements as the problem you're trying to solve[1].

- Masters will often fix problems by simplifying code. Refactoring will be a natural part to their coding workflow, not a separate "housekeeping" activity.

- Those who hide complexity behind more complexity are not masters. Those who always fix problems by adding more code are not masters.

[1] It could be argued that "add to numbers and do it fast" is a single problem and that's not wrong. Requirements like "speed" and "usability" are really just another aspect of the desired outcome of a program, but it's rarely thought of as part of the problem to be solved, thus I am considering these constrains as separate from the "core" of the problem.


👤 chx
I have already made the mistake you are about to make.

👤 computerdork
This is of course a matter of opinion, but for me, seems like there are three sides to this:

1) Knowledge of the core theories of computers: core ideas of computer architecture, good understanding of computational complexity (how long a program will take to run), networking...

2) Knowledge of software technologies: Python, Javascript, Java, C, Docker, Functional Programming, Object-Oriented Programming...

3) Knowledge of software engineering concepts: Software architecture, software process (agile, requirements gathering, testing), software complexity (and how to minimize it through good architecture and processes), general engineering principles (redundancy, fault-tolerance, solving problems early in the dev process...).

To me at least, the one that is neglected the most is the third one, "software-engineering concepts." Being able to think about systems at a high-level and well at the detail-level is one the most useful skills for an engineer.


👤 bob1029
For me, mastery is all about managing complexity. In my experience, most of the complexity in a software system emerges from excessive shared state between components and poor modeling of the domain.

If you can break your problem up into smaller, independent pieces, you can pretty easily manage complexity throughout.

By having a good domain model (which to me means context-agnostic and represented approximately in 3NF/BCNF), you automatically clear up most of the nasty interfacing between components. Also, having a domain model in a normalized form enables much easier querying for any required dimension of fact (i.e. SQL/LINQ/et. al.). The methods will almost automatically follow from a good domain model.

Being able to develop good models of the domain and manage incremental complexity are the hallmarks of a master software engineer. You should note that neither of these fundamental skills requires the use of a computer.


👤 ipiz0618
IMO, it's knowing how to balance code quality and handle errors within time constraints and other restrictions. Any simple application has the potential to be very complex when one wants to handle every possible scenario. Knowing where to draw the line(s) would be what I consider mastery.

👤 mikewarot
I heard a story that Dan Day - Rose Hulman class of 79, once sat down and typed in a complete system of programs and it worked the first time.

Ward Christensen did it once as well, to the annoyance of my late friend Lloyd Smith, may he rest in peace.


👤 brabel
Lots of people here seem to think they know what mastery looks like, but to tell whether someone is a master in something takes another master. And I doubt most of the people who think they are one, actually are.

I will try to avoid doing that myself, specially I will avoid implying I am one, but I think it's possible to come up with a few criteria to help you "judge" the level of mastery one has in software engineering:

* can create a project from scratch without pondering forever about each and every choice, while picking reasonable choices that, together, approach optimality given the circumstances (notice that this depends mostly on the team/company involved so there's not one right universal answer).

* can break up the work in manageable pieces so that progress can be made (regardless of how many people actually work on the project) and measured easily. This is really hard and can only be done properly by a practitioner (meaning, no, your PM can't do that for you).

* can establish a good base design that facilitates achievement of the project's objectives (e.g. if performance-focused, then architecture might differ significantly from a more maintainability-focused one).

* knows to apply the right amount of testing/automation (too much or too little can be damaging).

* can focus on the task at hand, avoiding unnecessary work (many great technical developers fail to do this due to their preference for harder challenges that may not be the right ones to address).

* can communicate well (because knowing it all but not being able to pass the knowledge on or convince others will cause most of your knowledge to become inaccessible).

Notice that to be able to effectively rate a person or team against each criterion is itself something subjective sometimes, so you won't get a clear-cut answer no matter how you look at it... but I am sure that there are ways to use metrics for each one, though we all know the problem with metrics (people will game it), so yeah, it's difficult to figure this out. Just make sure you don't fall into the trap of judging people solely on subjective grounds though as our natural biases are quite crippling (see psychological studies about human bias) and will cause you to misjudge others, sometimes disastrously.


👤 wkoszek
Ability to: Start small with a shitty demo which can get buy-in from other folks on a team and continue pounding out high-impact features in no time first, to sell the invention to anyone. Then get this demo cleaned up to the point it ships with docs, tests, telemetry in production, and there are no bugs and crashes. Just couple of improvement requests. And when this thing can be enabled/disabled dynamically, and enhanced/expanded for the future without major rewrites.

👤 rswail
1. Understand that Software Engineering is not a discipline yet. There are some foundational elements, but the field is less than a century old.

2. Think in the abstract. Implementation details are just that, details.

3. Ideas and concepts can be reused, code reuse (in business logic areas, not technical support) is rare.

4. "Design is about constraints" - Charles Eames

5. Understand the foundations, finite state machines, what REST as a style actually means, why Nouns are more important than Verbs, don't reinvent things...

6. Learning never ends.


👤 kissgyorgy
Uncle Bob Martin coined the term "Software Craftsmanship", you can watch his talks about the topic. I intend to follow it throughout my career.

👤 ignoramous
Not sure about software engineering, but if I have seen anyone absolutely master anything "programming" related, it'd be Martin Shkreli. The programming environment: Microsoft Excel.

https://www.youtube-nocookie.com/embed/fASInVKShnM


👤 phendrenad2
Mastery of software engineering means, given any task, you can do it, at any point along the fast/correct/cheap triangle gradient. In a corporate environment, you might lean toward fast and correct. In an open-source context you may lean toward correct and cheap. At a pre-funding startup, building an MVP, you may go with fast and cheap.

👤 max_
My definition of a "Master" is someone that can churn out software that is both;

- High performance (in terms of efficiency in using computational resources)

- Reliable i.e does exactly what we want and doesn't crash. This also includes clear documentation.

I think to reach there, some of the things one may want do are;

a) Learn TLA+

b) Study hardware (processors, memory)

c) Study software, protocols like tcp/ip

d) Build experiments & ship


👤 davmar
I don't know, but I one practice along my journey has had a surprising impact upon my skill development. That one thing is: I started coding in VIM. For some reason, making that change has improved my thinking, and that's been a big part of my growth.

So, maybe you'll find that to be a helpful practice as well. It's worth a try.


👤 MarkMc
Mastery in any field involves 4 components: Accumulation of knowledge, conceptual understanding, judgement and skill

👤 GuB-42
Nothing specific to software engineering.

But I'd say a master is simply someone you have a lot to learn from.

I'd say you have mastered the discipline when even though you know the limits of your abilities and you are eager to learn, it becomes difficult to find someone to teach you something new.


👤 xyproto
IMO:

The ability to judge risk in terms of time and money.

The ability to judge the amount of security that is needed (a productive level that is still safe).

To think long-term, in terms of avoiding complexity buildup over time, and in terms of avoiding vendor lock-in.

To help others get up to speed.

To stay productive over time.

To stay open to learn something new.


👤 girzel
Having an accurate intuitive assessment of how difficult a task will be, and;

knowing what to Google.



👤 rcaught
The code you don't write is more important than the code you do write.

👤 m3kw9
Ultimately where you want to be with soft eng. is where you can produce and deliver value, regardless of mastery. That includes communication and steering of projects to value

👤 revskill
Problem solving skills. It doesn't matter if your tool is the best, it only matters which tool is suitable for the job.

So the master to me is the one who knows which tools for which job !


👤 INTPenis
In my experience it means you rarely write software but you've moved into architecting software platforms and telling other people how to write software.

I'm just a devops guy but my current project is like that, where our lead architect has really impressed me by drawing up the design of a very scalable system. My task is merely to implement and manage kubernetes for it and we have other devs who are using java, .net and golang to write the components.

This impresses me a lot how our lead can come up with such a design and make it work from paper to practice.


👤 HellDunkel
Nintendo, Doom, Unreal, Maya (not Autodesk), Nuke, VRay... beautiful products altogether. Its almost always teams of people but leads are key.

👤 keyle
Excellent question, but how does one measure the length of a string constantly being extended on moving sands?

👤 collyw
Something that makes sense to the next developer without too much effort (assuming that it works).

👤 rramadass
See the paper linked in this thread by user "still_grokking"; it answers your question.

👤 e9
How many times a year do they have to wake up in the middle of the night to fix something broken?

👤 tomaszs
Software engineering mastery occurs when a person brings donuts for everyone every single day.

👤 leowoo91
They're the ones who understand there's no silver bullet for all problems.

👤 ojciecczas
Among other things a master splits the I/O code and core logic code.

👤 indymike
They build better software. They are both strong contributors individually, and strong team members. Better is relative to whatever the purpose of that software is. If it needs to be fast, it is. If it needs to be secure, it is. If it needs to be made quickly, it is.

👤 LordHumungous
Ability to design and implement a large scale system from the ground up.

👤 paxys
Being able to break a complex project into granular bite-sized tasks.

👤 rusk
Highly competent in at least 3 languages; general understanding of 5 others; good written communication and presentation skills; able to create gui; understanding of distributed systems and networking; unix command line; can at least rebase in git

👤 simplecto
Actually coding something is the last resort.


👤 tr1ll10nb1ll
George Hotz lol

👤 0xdeadbeefbabe
Someone who is good at mental models.

👤 tsjq
Perfect estimates, deep insights, and anticipating challenges

👤 Ayesh
- Sqlite

- Symfony framework


👤 MathematicalArt
INTRO

To answer this question, one must first operantly define what mastery is. So what is mastery? To start, mastery is something on which one can be on the path towards, yet mastery is also a thing which has been achieved. So we need to talk about flow along a path and achievement of the objective.

PATH

The path to mastery is characterized by humility and child-like exploration combined with an intrinsic drive to integrate learning a and take paths that make individual sense to one on the apprentice’s path towards mastery. It is concerned with thoughtful action and adaptation. The ultimate focus is on the seeking of truth (an intrinsic reward) rather than and sometimes at the detriment to receiving external rewards (accolades, financial renumeration, and other materialistic artifacts). Such sacrifices and focus is made early in the mastery process and pay off once one inevitably achieves it. This is a pattern common in most individuals we would consider to be masters and the difficulty lies in staying on such a path despite internalized intuitions and the listening to an internal voice/drive pulling us away from society, the majority of who are not on the path at any given time. Mastery is high risk because it a deviant process often focusing on long term rewards rather than instant gratification or even short-term survival.

ACHIEVEMENT OF

What can a master do? Why is that beneficial?

Mastery is the seamless ability to fuse the intuitive with the rational while performing and understanding at a high level of competency in a given discipline or domain. It manifests as as such a deep internalization of a domain that one is able to spend cognitive effort on seamless cross-pollination between other disciplines, sculpting domains at will. Mastery is only achieved through embracing the humane, which means internalizing the fact that what makes us human is the blending of the rational (a step-by-step-step process) with the intuitive (a distributed and probabilistic process).

MASTERY IN SOFTWARE ENGINEERING

What is engineering? What is software? What commonalities do they share?

Given a definition of mastery, we see that the question of what engineering and software are next to be defined. These three questions should serve to form a foundation for discussion.

Engineering is the process of designing reliable processes and systems given constraints on resources, tools, and available thought patterns. It is also fundamentally concerned with risk management on the path to achieving an objective.

Software is a system which interfaces with either humans, machines, or both to achieve an objective. It serves as a medium for sending conceptual communicative signals across, within, and between various levels of abstraction to include physical computing done at the level of hardware.

As an aside, it must be stated that the delineation we place between software and hardware is an arbitrary though sometimes useful fiction to allow us to get tasks done. With this being stated, such a simplification is often over-used to our collective detriment.

The master software engineer understands hardware and software deeply at both the intuitiveness rational levels in order to design systems and process to specifications and with clarity to both machines and humans alike. This ability to provide and communicate with clarity is especially important when we consider that our colloquial models of machines themselves are over-simplified, a fact that one will quickly become aware of when trying to design applications across platforms that perform “low level” file system operations. In this case, it becomes apparent that even operations such as opening and closing files, tasks which one would think are stable and solved problems, have such variability that cross-platform development is more challenging than it should seem.

Not only does a master software engineer have the ability to communicate at different levels of abstraction of hardware and software—such a master also recognizes that communication is the operant word. Communication is signal propagation, filtering, and more, occurring at the personal, interpersonal, and organizational level as well. The master software engineer is seamlessly able to apply all principles of software development to psychological phenomena as well. To such an individual, there is no difference conceptually from a root pattern perspective.


👤 anonytrary
Ship more, talk less.

👤 forgotmypw17
story of mel.


👤 thedevindevops
Pai Mei mustache, sits on a rock meditating and dispensing advice to juniors, quotes Martin Fowler by heart, seems to never touch a keyboard but every commit will replace entire module(s) flawlessly, demonstrating high level architectural knowledge that lies on the far side of the organisation's learning curve.

👤 johndoe42377
In the field of programming languages design and implementation look no further than Erlang, MIT Scheme (a true gem), GHC, Scala and Go.

Those are creations of exceptional masters.

For smaller projects take a look at nginx, Tokyo cabinet (a DB), redis, and, perhaps, python's requests and Clojure (one man's effort to unify obvious things).

Again, these are masterpieces, not just merely good things.


👤 one2know
Que all the managers that will immediately list off 5 manager activities as software engineering "mastery."

👤 blackrock
Two words: Functional Programming

👤 permille42
"Who is John Galt?" Mastery could most closely be viewed as a state of enlightenment. To the non-enlightened it will appear to be dismissive and lazy.

There are a variety of positions one could take once reaching enlightenment: 1. Domination. One could choose to be controlling of the entire field and use it for selfish benefit. 2. Dismissive. Once you reach the pinnacle it becomes apparent that both humanity and the society it has created are horrid and aren't worth interacting with. 3. Appreciation. One could choose to be thankful for being able to reach such a position and to respond by generously using the mastery to use it for the good of humanity. 4. Constructive Legacy. One could choose to form ones own group around that mastery to preserve it beyond themselves.

I believe the dismissive position is the most reasonable and hence most likely to be chosen by those who reach true mastery.

All four positions regularly occur and you can see it readily in masters of respective fields.

The way a master appears depends on their reaction to having gained mastery.

I think the dismissive position is also most likely because I believe there are far more masters than we ever notice. They are not noticed because the majority of them don't bother to use their mastery in an obvious way.

Why should a master bother to correct those beneath them?

If a master interacts with society they have an uphill battle to being treated with the respect they deserve. For the true master there is great value in going their own way and rejecting society.


👤 raghav_nautiyal
Who is John Galt?

👤 LeicaLatte
Clearing a FANG interview. It does take months to prepare for even if you are a master.