I’m studying programming, and I don’t agree woth my teacher. She basically said that if we use break (and continue too maybe) our test is an instant fail. She’s reasoning is that it makes the code harder to read, and breaks the flow of it or something. (I didn’t get her yapping tbh)
I can’t understand why break would do anything of the sorts. I asked around and noone agreed with the teacher. So I came here. Is there a benefit to not using breaks or continues? And if you think she’s wrong, please explain why, briefly even. We do enough down talking on almost all teachers she doesn’t need more online.
When it comes to programming you’ll find there’s rarely a right and wrong, it’s usually a question of “meets requirements” or not. She’s your customer and she says not to use breaks or it doesn’t meet the spec (be thankful that customers in the business world are rarely this specific).
As I said to xmonk: “u make me not wanna be a software engineer with this talk…”.
This is a good mindset to be in however, thanks
As I said to xmonk: “u make me not wanna be a software engineer with this talk…”.
Yeah, and it gets worse before it gets better… https://youtu.be/BKorP55Aqvg
She’s reasoning is that it makes the code harder [for her] to read, and breaks the flow of it or something. (I didn’t get her yapping tbh)
Fixed it for you. She’s imposing her preferences on the class. Unfortunately, it’s easiest to just suck it up and appease her than to fight it. Just my two cents.
Oh yea, definitely just follow the arbitrary preference. It’s actually pretty good practice for your professional life to learn to follow the occasional arbitrary bullshit… you’ll need to obey a depressing amount of it in most large companies (especially a shitshow like Google).
u make me not wanna be a software engineer with this talk…
You either learn to work within a system or you build your own system. Guess where the money is.
At the end of the day, following your own coding preferences isn’t the fun part of the job. The fun part of the job is looking back and saying “hey, I did that.”
Oh, don’t worry, every other job has to deal with the same bullshit or worse and we get to have fun solving problems.
You might be right, problem is that I’m already appeasing her by not writing in a language that I know, but in one that she knows. However I’m enlightened by your correction, might explain things.
It’s very rare in the industry for you to start something and have the flexibility to pick the language. You’re much more likely to be working on an existing system or expected to work with whatever the company uses.
That said, there’s plenty of opportunity to make your own decisions. Having to follow arbitrary style rules is hardly a consideration (actually you’ll find it’s hard enough just to have consistent arbitrary rules within a company).
There may also be opportunities for you to change these rules, but it’s also wise to pick your battles.
Assuming C/C++, dare we even ask what this teacher uses instead of switch statements? Or are her switch statements unreadable rat’s nests of extra conditions?
This is a good life lesson. We’re all idiots about certain things. Your teacher, me, and even you. It’s even possible to be a recognized expert in a field yet still be an idiot about some particular thing in that field.
Just because some people use a screwdriver as a hammer and risk injuring themselves and damaging their work, that’s not a good reason to insist that no-one should ever use a screwdriver under any circumstances, is it?
Use break statements when they’re appropriate. Don’t use them when they’re not. Learn the difference from code that many other people recommend, like popular open-source libraries and tutorials. If there’s a preponderance of break statements in your code, you may be using a suboptimal approach.
But unfortunately, for this course, your best bet is to nod, smile, and not use any break statements. Look at it as a personal learning experience; by forcing yourself sit down and reason out how you can do something without using break statements, you might find some situations where they weren’t actually the best solution. And when you can honestly look back and say that the solution with break statements is objectively better, you’ll be able to use that approach with greater confidence in the future.
It’s a very good lesson- to the point where I wouldn’t be surprised if the teacher is deliberately putting an arbitrary restriction on the assignment.
If you want to have a career, the people that pay you are going to make you do things that you consider to be ridiculous. That’s work, that’s life. You’ve got three options- Just smile and nod and do it their way, get huffy and tell them that you don’t like their yapping and you’ll do their project your own way, or politely suggest there may be an alternative way, and ask if they are willing to be flexible with some requirements.
It’s a very good lesson- to the point where I wouldn’t be surprised if the teacher is deliberately putting an arbitrary restriction on the assignment.
It’s not arbitrary. When you start out on a profession, the first thing a good instructor does is make you unlearn the things you already think you know before teaching you the things you need to know. Think of it this way: When you pick up a golf club and start hitting the ball, you’ll drive it left and right. First thing you’ll be taught is to only hit straight. Even if you think you should try to drive a curve ball, a good teacher will not allow you. Only when you have mastered the basics will he teach you to drive curved balls. So ignore your teachers advice at your own peril, but it will most likely set you up for an expert beginners career.
As a closer, I can tell you this much: I received the same advice almost 20 years ago and now, after being a professional developer for two decades, I can not recall more than five times when a
break
statement actually made more sense than to rethink the algorithm.You guys have so much faith it’s contagious. Very motivational words, Thank you.
I’ve never considered that she might just be very smart. You’re very optimistic. Filled me with hope out of nothing. Thanks!
last part gave me something of a mindset change, for the better. I’ll try being a little less of an idiot then c: Thanks!
There will always be some instructors that are more dogmatic than pragmatic. All the same, there will be instructors that have pearls of wisdom to offer. Regarding the “break” and “continue” keywords, this lays somewhere in the middle.
One of the purposes of higher-level programming language is to remove from the low-level, machine-specific language of assembly, by offering other, more descriptive constructs, like “while”, “for”, and “switch”. In the C language, “break” is almost mandatory in a “switch” statement but only occasionally shows up in a “for” loop, excepting drivers. In Python, “break” only exists in loops, but there are lots of loops which can be replaced more efficiently with comprehensions, so “break” can be a sign of poorly organized logic.
If you can specify which programming language you’re learning, it would help to understand what your instructor might have meant to teach.
This rule will apply for C# only I think (I hope). I also like your optimistic points, thanks.
There is a school of thought that break and continue are just goto in disguise. It helps that these two are more limited in scope than goto and can be considered less evil. If you read the book Clean Code by Robert Martin (it should be required reading for all developers), you’ll see that he doesn’t like functions to be very long. I think his rule is no more than 4 lines. I try to keep mine around 10 or less with a hard stop at 20 unless it can’t be avoided because I’m switching over a large enum or something. If you put your loops into functions then you can just use return instead of break.
I did have a discussion with a teacher once about my use of early returns. This was when I had returned to school after many years as a professional programmer. I pointed out that my code has far less indentation than theirs and was simpler because of it and that it is common in the world outside of education. I got all of my points back he has deducted.
You’re going to hear some good and bad advice from your teachers. Once you have a job check out what the good developers are doing and just follow them.
break and continue are just goto in disguise … use return instead of break
An
if
statement is goto in disguise. So is a return.Some would argue having 10x 4-line functions are worse for readability and debugging than a single 40-liner, because to actually understand the code you have to jump around all over the page (another disguised goto - for your eyes!)
you’ll see that he doesn’t like functions to be very long. I think his rule is no more than 4 lines.
Four line functions? Sounds like a codebase adhering to that rule would end up as a nice thick function soup. It feels like… I dunno, those database programmers that like normalising databases to the Nth degree.
If you put your loops into functions then you can just use return instead of break.
And that just sounds like abusing the concept of functions to replace standard flow control that your language provides.
I mean, sure, if I find repetitive chunks of code popping up I’ll break them out into functions, but - generally speaking - I do functions that translate into discrete real-world or UI tasks. I’m opening and parsing a text file into internal structures, I’m doing the reverse to go back to a data file, I’m cycling through the data to update UI components, etc etc.
But hey, I use C and on the rare occasion I sneak a goto in there, so I’m not qualified to pass too much judgement.
Yeah, it’s a bit on the extreme side for me. 10-20 is what I prefer. I find that if I follow that rule the code is easy to come back to later because the things a function does are more clearly defined. I can look at a higher level function and it’s filled with function calls like readX, createY and doThis. I don’t have to look at as many blocks of code and try to remember what the intent was.
I wish people stopped praising a book that has been repeatedly debunked as dogmatic, outdated, nonsensical garbage.
No, do not bother with Clean Code. Been there thinking it was some bastion of truth that just went over my head. It’s not. Fuck uncle bob.
I don’t know your or his source, but warning me before I read it deserves a thank, so thanks for saving me time.
this is only scratching the surface of the turd iceberg, but here: https://qntm.org/clean
Saved me even more time! I won’t be reading that. I don’t know java at all, and the review says that the advice is dated, bad or both. Thanks
It’s a highly opinionated book but it is full of good advice that in my opinion goes too far. Using a metaphor here, I think he wanted to get people to the moon but knew that he needed to give guidance to get to mars because people would look at whatever he wrote and think it’s too much.
The book has several chapters discussing the SOLID design principles and showing how to apply them. You’ll be a better programmer for reading it. “Uncle Bob” the person can be a bit problematic so I don’t particularly like telling people to give him money. Try getting the book from the library or a second hand store. There are also videos out there of him speaking at conferences that may give a good taste of the material. He has a blog too.
If you put your loops into functions then you can just use return instead of break.
I wonder if I can bypass her rule with this, thanks.
Well, sometimes it is possible to write a loop with
break
or without it, and in such cases solution withoutbreak
is better readable. But if you don’t see a simple way to avoid usingbreak
, use it. It is very common, as well as having multiplereturn
statements in function. Evengoto
can be a good solution sometimes if it points to label located below and not very far.However you should avoid some antipatterns. If you write an infinite loop that is interrupted only by break, it is highly likely that you are doing something wrong. Nested loops with multiple breaks or gotos are very hard to read and debug. Such code usually can and should be rewritten for better readability and to avoid possible errors (occasional hangs, for instance).
Okay, I want to clarify two different but highly similar syntaxes:
break;
andbreak 3;
. The latter syntax of break #number is fucking awful and you should never use it. In most languages it’ll only count loops and not conditionals so it can be extremely hard to tell how many levels of indentation you’re unrolling and it’s probably a code smell about having an overly complex function anyway.However, good old single level break and continue are awesome and useful for making it really clear what preconditions exist in complex situations when looping. It’s much easier to read a series of elementary if break statements than one single gigantic if statement with half a dozen conditions.
Most tools in our toolbox are useful… oh, except goto (unless you’re programming in assembly language). Fuck goto.
haha I personally like both gotos and multi layered breaks, I know it’s bad practice, and I avoid them, but it’s fun.
That aside, you summed up what we are thinking pretty accurately.
When I need a break I make use of a break
heh, nice one
A blanket rule against certain keywords sounds pretty silly to me. Break and continue are useful tools in the right situation. Sounds like it’s her preference that she’s decided to impose on the rest of you.
You could ask her what she expects as an alternative. You could show her code that uses it and ask how she expects you to rewrite it to satisfy her standards. Ask nicely because unfortunately just being right isn’t enough for some teachers, they have to like you too.
If she has a good answer, then do it that way as long as you’re in her class. If not well… sorry that’s just a terrible teacher.
Replace break with goto 😈
Yeah, that conversation is probably unavoidable. Let’s hope for a good answer. (also I heard that maybe I won’t be studying under her, rumors only, but we’ll see. Thanks.
This is too unspecific, not a focused question. Yes, break and continue break directed program flow. Like early returns do too. That doesn’t make them bad tools though. Use them where they make sense.
The only time I’ve used break outside of switch statements is to break out of for each loops early, when I’m checking to see if at least one element in a collection meets a condition. I really don’t think there’s ever a good time to use continue, to be honest. And if you use a labeled break statement, that’s a problem.
continue
is useful as a loop analog to early return in a function context, which helps keep indentation/nested conditionals under control and in turn improves code readability.
Well if you can’t break out of anything then I guess you will just have to return instead. I’m sure this will result in code that is much easier to read.
Not a bad idea, thx
I suspect “you’ll fail the test if you use
break
” is more of a joke by your teacher than an actual grading rubric, although if you used it more than twice in the same test I wouldn’t award you better than a B.Is there a benefit to not using breaks or continues?
The benefit is that you learn to write non-branching code. That’s important for beginners, who tend to write very complicated and complex code with lots of branching, which they then discover they’re not able to test and debug. Barring you from using
break
andcontinue
forces you to write more abstract code to achieve the same level of function with less complexity, and that’s how programmers advance in skill - simpler, more abstract code.Ultimately it’s an effort to kick a crutch out from under you. Whether you think that’s appropriate for a teacher is up to you, I guess - I’m inclined to think it is, but many students don’t respond well to being challenged.
well, It’s not a joke. But the rest is way to optimistic. You aren’t the first to say that my teacher is just way smarter.then I give credit for but the thing is, noone (in my class) that I tried to share this idea with believed this to be the case. I’ll stay optimistic, and see what’ll happen.
Thanks for the warning about overly braching code, I’ll keep that in mind. (however, I don’t get why more loops and ifs makes a function harder to test, I’m just going to trust you and that I’ll find out later.
(however, I don’t get why more loops and ifs makes a function harder to test, I’m just going to trust you and that I’ll find out later.
Well, it’s fairly easy to explain - each branching statement in your function doubles the number of discrete paths through the code. If there’s one
if
statement, there’s two paths through the code. (The one where theif
predicate is True, and the one where it isn’t.) If there’s twoif
statements, there’s four paths through the code. If there’s threeif
statements, there’s eight paths through the code.In order to test a function completely, you have to test every possible path through the code. If you used three
if
statements, that means you have to devise and write eight tests just for the different code paths, plus testing various exceptional cases of the function’s input (“what if all inputs are 0”, “what if all inputs are null”, “what if the integer is a string”, etc.) That’s a lot of tests! You might even have to write tests for exceptional cases combined with different code paths, so now you’re writing eight times the number of tests you otherwise would have had to.Whereas if your function doesn’t branch at all, there’s only one path through the code to have to test. That’s a lot fewer tests which means you’ll probably actually write them instead of saying “well, it looks like it works, I won’t spend the time on tests right now.” Which is how bugs make it all the way through to the end of the project.
Thanks, it makes sense. I just don’t yet see how I’d reduce the number of ifs*, but I guess it’s a case by case thing.
- simplest I can think of is let’s say we need different logic based on a number’s parity. How do I avoid
if x % 2 == 0
?
What would be an example where you need different logic based on a number’s parity? Why wouldn’t you write logic that ignores the number’s parity?
Part of getting better as a programmer is realizing which stuff doesn’t matter, and writing less code, as a result.
oh, okay, I hear you. Thanks
Good luck
- simplest I can think of is let’s say we need different logic based on a number’s parity. How do I avoid
deleted by creator
there is no code snippet, it’s in general. break = fail. Maybe there are some cases where this isn’t true, but I have very little experience with this so far.