4 ms·
Your question is not quite the right framing. By the time you hit "Staff level" you should have learned that programming language and framework are simply windo
by belfalas 4y ago
Your question is not quite the right framing. By the time you hit "Staff level" you should have learned that programming language and framework are simply window dressing on top of the fundamentals. The fundamentals are things like files, sockets, TCP/IP, operating systems. Or said differently: things that have been with us since the 20th century.
Wisdom I got many years ago from an old hand was to run this thought experiment:
* An HTTP request
* A business object
* A database transaction
That's web architecture, more or less. Someone requests something and your programs mission is to find that something as fast as possible. In some cases Rails is a great fit, depending on the constraints. Under different constraints Go is the right solution.
When learning the new technologies the key is understanding what problem that technology is trying to solve most optimally.
Additionally, what really separates a "Senior Software Engineer" from the levels above is understanding that after a certain point, technology is irrelevant. Social factors drive decisions much more than technical considerations (Conway's Law).
- nivertech 4y ago>The fundamentals are things like files, sockets, TCP/IP, operating systems. Or said differently: things that have been with us since the 20th century. Wisdom I got many years ago from an old hand was to run this thought experiment: * An HTTP request * A business object * A database transaction That's web architecture, more or less. I disagree, IMO the fundamentals are: Naming Things, Immutability, Idempotence, Behavior/Workflows/Transactions/Business Processes, Distributed Systems, Cryptography, Algorithms and Data structures, etc. In addition to technical fundamentals, there are people fundamentals/soft-skills.
- belfalas 4y ago> Naming Things, Immutability, Idempotence, Behavior/Workflows/Transactions/Business Processes, Distributed Systems, Cryptography, Algorithms and Data structures, etc. All of these things are footnotes and implementation details to what I wrote.
- nivertech 4y agoThe only candidate to be fundamental that you mentioned is a business object (I guess you mean the same thing as an aggregate in DDD jargon). HTTP request and database transaction[1] are examples of the specific protocols/technologies, and not the fundamentals. -- 1. I guess RDBMS/SQL transaction b/c that's what people usually mean by this term.
- belfalas 4y agoFunny, in my mind "business object" is the least important thing out of what I wrote. Imagine it's the 1990s and you are coding some hot thing to drop into cgi-bin. My list now changes to be: * An HTTP request * A perl script (or C binary) * A database transaction Things like DDD exist to assist humans, not computers. EDIT: in place of "database transaction" we might also say "reading from persistent durable storage" (like a file system).
- nivertech 4y ago1. Your list of fundamentals is what was my level of understanding in the early 90s. 2. Everything exists to assist humans, even when assisting animals and inanimate objects;)
- belfalas 4y agoI am not sure what argument you are trying to make or if you are just being snarky at this point. In any case, it seems we disagree and won't come to an understanding. So, wish you the best and take care.
- 88j88 4y agoYou just gave me PTSD; a coworker (another principal architect), who felt that my strategy was flawed, simply gave as his counter-point "I've been doing this since the early 90's, and I've failed with that strategy over and over in the past" instead of providing any answer to my 2 dozen points in support of my decision.