TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Software engineering is about working with different layers of abstraction

4 pointsby itsmefazalmost 4 years ago
One of the things that my mentors or industry veterans have failed to teach is the importance of abstraction.<p>I&#x27;ve been in this industry for few years and being self-taught one of the questions that still disturbs me is what the goal of software engineering was about?<p>My mentors (typically principal or staff engineers) would answer it along the lines of the business use case. And for some reason, I&#x27;m not satisfied with the answers or maybe I&#x27;m just too arrogant to accept that the business matters more than its engineering discipline.<p>It just occurred to me today that the most difficult part of software engineering was building better abstractions. And the issue I had comprehending was not the business aspect of it but the actual definition of software engineers (and software engineering). I guess the better definition would be &#x27;system designers&#x27; or even &#x27;abstraction designers&#x27; because that is what we always do build complex systems for simple components.<p>Maybe I&#x27;m just naive in my thinking?

2 comments

muzanialmost 4 years ago
I would say instead software is just communicating, and communicating is about abstraction. That&#x27;s from the user to the CEO all the way down to the software&#x2F;hardware.<p>There&#x27;s a shift from communicating in an imperative manner to communicating in a declarative manner. Even between humans, communicating to a junior&#x2F;senior, there&#x27;s a difference between how much imperative and how much declarative communication you do.<p>Business use case is very declarative - &quot;This app should send me a reminder before my appointment.&quot;<p>The next level of abstraction breaks it down further: How many minutes before the appointment? How many reminders? Email, push notification, in-app? Which of these are practical given our resources?<p>Then the next levels break it down further. Do you want more control (imperative) or do you want more abstraction? Is it so dumb you have to explain to it step-by-step how to thread itself and clean up memory?<p>And then there&#x27;s a different level where you have to explain it to the other person maintaining the same code.
评论 #27615679 未加载
mikewarotalmost 4 years ago
Engineering is the applying of science and technology for practical use, as far as I&#x27;m concerned.<p>Consider electrical engineering, and getting AC power to your computer. There are huge systems sometimes spanning continents, that then fan out to smaller and smaller branches, then to your home or office. Each and every section of that network was protected with some form of fuse or circuit breaker. They are all coordinated in such a way that the smallest breaker in the system will trip first if there is a fault on it&#x27;s part of the network. At the end is a circuit that delivers a standard voltage at 5-20 amps, at 50&#x2F;60 Hz, depending on your country. The circuit will protect the wiring in the walls against overcurrent, and will sometimes, depending on local regulations, even protect against flow through you, and arcing in the wires.<p>All of the systems were fairly rigidly engineered to prevent issues, even when struck by lightning, attacked by rodents, cars, or the odd tree. Everything that makes up the system is engineered to a set of specifications.<p>Contrast this with software engineering. Right now, it is not a strict engineering profession.<p>There is no equivalent of any of the above in the world of computing. You have a computer that can flow all of its resources (and YOUR resources) into any task, no matter how wrong it is, with no provisions for limiting side effects.<p>We&#x27;ve got a LONG way to go in the world of software. Like the early days of electricity, there is a strong tendency to blame the user when things go wrong. And there is a strong tendency for things to break, due to lack of safety factors.<p>The way we distribute computing resources, our operating systems, are not fit for purpose. When you run a task, there are no circuit breakers of any kind.<p>Now, when you consider all of that, is fixing that part of your job? No, it is not. However, being aware of the bigger issues, and perhaps seeking solutions in the off times, might be.<p>The thing you are hired to do is to solve business problems, but in a way that is not going to risk unnecessary harm. If there is something that might bring down the business, it is your responsibility to report it. If there is something that may endanger people, it is your responsibility to stop it from happening.<p>Computing is a tool in service of business. The computer is just a tool, not the goal.<p>Sorry this is a bit of a rant, I&#x27;ll be glad to clarify any questions.
评论 #27569644 未加载
评论 #27569663 未加载
评论 #27568619 未加载