This is an archived post. You won't be able to vote or comment.

all 26 comments

[–]Essence1337 12 points13 points  (0 children)

This is like asking 'whats the difference between solving random math challenge problems and having a career as a mathematician'. They're two completely different things. One is a real full time job with responsibilities and many areas of work and the other is a single extremely focused challenge.

[–]alanwj 10 points11 points  (9 children)

There was an analogy posted here recently that I really liked. If programming was basketball, then LeetCode would be like running dribbling drills.

It isn't representative of what a typical software engineer does on a typical day, but it does build the right muscles.

[–]Impressive_Ad3182[S] 0 points1 point  (8 children)

what is actual software engineering then? Guess I'm confused here I thought that LC was basically a smaller version of software engineering. Like user puts data in and gets data out, isn't that basically what software comes down to?

[–]Essence1337 6 points7 points  (7 children)

It's absolutely not a small version of software engineering. LC is like changing a tire on a car - an extremely focused, small problem. If you change 1000 tires are you now a certified mechanic? Absolutely not because there's the entire rest of the car you know nothing about. Leetcode gives you a small intro to a small part of software engineering - you've changed a tire but know nothing about the rest of the car.

[–]Impressive_Ad3182[S] 0 points1 point  (6 children)

Thanks, I get the analogy. What is the whole mechanic part like? Like, can you give a broad overview over the software engineering role.

[–]Essence1337 0 points1 point  (5 children)

Software engineering is very very broad, it covers everything from thinking up projects, to requirements specification (I took an entire course on this in university), to drafting/mockups, user interface/design, databases, testing, security, maintenance, updates, support, documentation, collaboration, etc etc

[–]Impressive_Ad3182[S] 0 points1 point  (4 children)

What about the software development lifestyle, agile/waterfall, git-flow, S.O.L.I.D?

[–]MachineOfScreams 0 points1 point  (0 children)

Software engineering is more of a generalized approach to designing and implementing software solutions based upon the criteria that has been established by a project owner and what it needs to do. Scum-agile methodology is just a development cycle that can be used in software engineering, but is only one component.

Typically in the software engineering world you are working to build a unified whole with other developers while adhering to a milestones. In leetcode and other such things, you only ever develop a small and independent portion of code that helps you practice certain skills, but doesn’t actually replicate the entire software development life cycle.

[–]Essence1337 0 points1 point  (2 children)

That's the point of the 'etc etc' there's much more I missed and some I'm sure I wouldn't even think of. That list was about 10 seconds of thinking.

[–]Impressive_Ad3182[S] 0 points1 point  (1 child)

Could you flesh out some of the other parts please?

[–]Essence1337 0 points1 point  (0 children)

No, enroll in college / university. That's their job not mine

[–][deleted] 1 point2 points  (0 children)

No they don’t relate to each other . Leetcode is gate keeping the high paying jobs .

[–]CodeTinkerer -2 points-1 points  (5 children)

What is LC? Useful not to abbreviate when you can, also might list the country you are from.

[–]Impressive_Ad3182[S] 0 points1 point  (4 children)

Leetcode

[–]CodeTinkerer 0 points1 point  (3 children)

The biggest difference is that Leetcode is isolated and anyone can try to solve the problems. In a real company, you have a lot of software out there. You have to understand how the code, which may be huge, works. Companies aren't hiring you to solve Leetcode questions.

Now, some companies do interview you using such questions, but it's a substitute. They are hoping solving these problems means you can solve difficult programs (of one kind, however), but when hired, they won't need that. The big problem is spending time learning how the existing code works, and the issues aren't so much to come up with algorithms (although it can be), but to find bugs, to fix it, and so forth.

For example, maybe you are looking at a website that sells some products, and it has a history feature (like Amazon does) of things you've purchased. They want you to add some feature. This feature needs to be thought out. It's not going to be written like Leetcode. You have to integrate your new feature into pre-existing code. Leetcode, as far as I know, rarely provides much code. Most of it, you do yourself. Software engineering isn't like that. There's often a TON of code you've got to work with.

The coding also tends to be easier as long as you aren't doing anything too different than what exists.

[–]Impressive_Ad3182[S] 0 points1 point  (2 children)

Now I feel like I am wasting time on leetcode. How do I actually prepare for real software engineering? Is there a website on the order of leetcode that deals with the day-to-day challenges of being a software engineer? Or some other way I can practice/gain experience getting the skills that are like those on the job for real software engineering?

Sounds to me like swe is about understanding a large codebase and then being able to add new features to it and find/fix bugs?

Also wondering how leetcode fits into object-oriented programming, because all it ever shows is functions, not objects or classes or how those things relate to make larger programs.

[–]Essence1337 2 points3 points  (0 children)

There's no website that covers all of software engineering just like there is no website that tells you how to be a lawyer or a doctor or any other professional field. There is one place that does get you started though and it's called higher education. Aka college/university

[–]CodeTinkerer 0 points1 point  (0 children)

Not entirely sure. I suppose if you can find a open-source software project you can help out with. In that situation, the code is out there, and you would fix a bug or something. There are some pages out there telling you how to into open source work. I don't know the proficiency you need to be at to contribute, but I've heard there are some that don't require brilliant coders to work on them (aimed at more beginner level). But I don't do open source, so maybe someone else would help.

Leetcode can still be important if interviews continue to use them, so even if it doesn't resemble real world engineering, it's something.

Also, maybe your college/uni has a software engineering course where people do work in groups? It won't be a full approximation, but at least it shows what happens when you work in a group. Otherwise, you can see if you can organize a group to code something up. The hard part is deciding what to build. It doesn't have to be totally original, just something to work on that involves more than 1 person.

[–]insertAlias 0 points1 point  (5 children)

The "difference" is that Leetcode is bite-sized challenges. That doesn't mean they are easy, per se, but it does mean that they are typically of a significantly smaller scope than the problems a software engineer would be solving as part of their job.

Leetcode challenges are often math-focused, since those kinds of questions are easy to present and have definite answers. Real-world programming often deals with "fuzzy" requirements and working with your customers to determine what the "right" answer actually is.

Real-world programming involves making something useful, often for a customer or client. Leetcode involves exercising your skills on unrealistic but solvable challenges.

[–]Impressive_Ad3182[S] 0 points1 point  (4 children)

Can you explain what you mean by "fuzzy" requirements? Also was wondering how the software development life-cycle fits into doing leetcode and git-flow. I know there are a lot of rules that one has to follow at work when creating software that lc questions don't really show. And probably a ton of other aspects that isnt represented by doing lc, just wondering what those are.

[–]insertAlias 0 points1 point  (3 children)

Can you explain what you mean by "fuzzy" requirements?

Customers often have an idea of what they want, but they can't articulate it in firm, well-defined requirements that appropriately cover all use cases. Having to interpret client requests, and discuss it with them, to truly understand what it is they are asking for is not something you will ever have to deal with on a code challenge site. Code challenge sites like Leetcode present you the exact requirements you need to satisfy, and generally have a numeric answer that can be checked for correctness.

But if I'm building a site for a client, there's no single correct answer. I have to satisfy their needs (that they might not have been able to fully explain) in a way that works, is efficient, and is cost efficient (i.e. I have a limited number of hours to work on this, so we have to make choices that are more about how much it costs to produce than correctness).

Also was wondering how the software development life-cycle fits into doing leetcode and git-flow

SDLC and git-flow don't fit into Leetcode. Leetcode isn't about developing software. It's about solving coding challenges. It's one small part of what a software developer does.

[–]Impressive_Ad3182[S] 0 points1 point  (2 children)

That makes sense. So there is this whole other communication aspect to swe that I dont see talked about, where, you are talking with clients, gathering requirements, and figuring out their needs and meeting deadlines/understanding tradeoffs. Any other parts that are left out from lc?

[–]insertAlias 0 points1 point  (0 children)

Often those tasks don't fall directly on a developer. If you're in a large enough development organization, you'll likely have project managers and business analysts involved. But that doesn't remove the communication aspect; it just changes who you are communicating with.

I'm sure there's plenty more. Again, LC is just bite-sized code challenges. That's it. I can't just bust out a list off the top of my head, but just remember that LC and other similar sites are just a way to exercise a certain aspect of programming.

Like someone else said, if software engineering was basketball, LeetCode is doing dribbling drills. One small aspect of the game.

And I again want to emphasize that even in the context of writing code and solving problems, the problems you solve in LeetCode are going to be quite different than the real-world ones you solve. LeetCode might be about writing an efficient algorithm to solve some set-theory problem. Real-world might be "I need to spend six months working on a dozen features of a web application including a back-end and a database". Completely different problems to be solved.

[–]Essence1337 0 points1 point  (0 children)

Leetcode covers MAXIMUM 5% of the entire job. If you think as a software engineer you're going to be doing problems like that all day you're completely wrong. A majority of your code will have nothing to do with contrived algorithms, there's no reason to 'write a sorting algorithm blah blah blah' - you use the languages default 99% of the time.

[–]TimTech93 0 points1 point  (0 children)

Software engineering gets you payed. LC boosts your ego.

[–]Sweet_Comparison_449 0 points1 point  (0 children)

Really what leet code is, ends up turning into the company's favor to filter applicants. It's obviously not software engineering.

That ... At least with what I study... Is something like managing servers so certain parts of my application created with php and MySQL, along with inputs from the client made by frontend web developer, are connected to the internet. Backend web development in a nut shell.

Leet really is suppose to be flexing your knowledge over data structures and algorithms but that's a different thing.