I have no idea how CS degrees work where you're from, but from what I've seen, they have very little to do with the work of a software engineer. Academia is famously shielded from the real world.
The hard part is striking a balance between some untangible ideal and the "it just works" solution. Either of the extremes work, in fact - in some environments. If you're making contract end-user stuff with no prospects at maintenance, "just getting it done" is a valid philosophy. When you're writing Shuttle software, you've got a lot more time to polish.
When you're trying to change the approach of the people around you, make sure to actually be sure about the benefits. Build up the pro's and con's, estimate the costs associated with "bad solutions", and the costs associated with "proper code" - neither is free. If you're lucky, the people around you understand opportunity costs - that makes it much easier to go towards better architecture, better code. If the code takes twice as long to write, but is half as much work to maintain and extend, you want to show that that cost actually pays back at some point, with reasonable certainty.
Customer satisfaction is also a hugely important factor. If the choice is between better code and better user experience, UX always wins, and it should. Again, the biggest tipping factor is when better code leads to better UX in the future - will the impact of better code be enough to make it cheaper in the end? Good code is often an investment, not something of value out of the box; rarely will you find an opportunity when good code gives better efficiency on the original task (note that I'm talking about "bad" code produced by good programmers - if your programmers are simply bad and sloppy, you're out of luck); the payback usually comes further down the road, if at all.
People have trouble thinking about investments. Get some numbers. It can be very helpful if you can actually gather some data from the past - when you suggest some architectural or code quality change, write it down. When the time comes and your suggestion would save time or improve customer satisfaction - write it down. When you have enough, go to your managers, seniors, whoever - it's easier to argue when you've got "hard" data in your hands.
The reverse applies too. Don't assume that "better" code is automatically better. I've seen many cases where the programmers were losing way too much time working out things that didn't matter - on a test application that was only there for one scenario and thrown away, elsewhere creating an architecture that was overly complicated and in the end inhibited further development.
Perfect is rarely good. If your backlog isn't full of (minor) bugs and feature requests that you simply don't have the time and resources to fix, you're probably doing something wrong, and your competition is gaining on you.
I'm usually thinking in terms of time or money. Translating things to money helps a lot in cost-benefit calculations. This took me a bit more work, and I got some experience from it. How much would I pay for that knowledge, was it worth it? It will save me some time down the road - is it enough? What will be the cost if I don't do it that way and it will turn out to be a bad decision down the road? It's crucial to know how much time was spent fixing bugs on the original task, otherwise the perception gets extremely skewed. If something took me 4 hours, just as estimated, but then I spent 20 hours fixing the bugs, it has to be visible that my estimate was way off.
It takes a lot of pushing if you're "the only one". But it can be done, you can move to better practices, better code, better software. Just make sure that in the end, it's actually better in some measurable way.