|
hahahaha you're so right
modified 3-Jun-21 21:01pm.
|
|
|
|
|
By the way. Well, I think they are challanging. They are hard, but I don't like the way they are taught. I simply find those games boring, like the problem itself is very hard but if I could use them in my own game it would be much easier to learn. When I do my projects I love to solve the problems, because I want to see my game work, but because I find those games and examples in the exercises boring, I just want to rush through them so I can sit and work on my own game or program that will do what I find useful. If we had to implement the same logic from Conways game of life in a more fun game than I would enjoy it, but I'm bored by the game itself. The example itself is boring, not the problem itself. It's like those bankaccount projects. Is it the only program that can teach classes and objects? I believe someone can give some more engaging examples than this same bankaccount project that you can find in every book and tutorial. I read a book about game development and the author also implements some of the common algorithms but I think its fun to do it when use it an little rpg game and not this boring Conways game or just this raw bubble sort exercise. What I would like to know is what can I use those algorithms for, because it's easier to learn things when you know why you need to learn something.
modified 3-Jun-21 21:01pm.
|
|
|
|
|
Quote: “Its the not the Destination, It's the journey.” Seems from the above that what's winding you up (in part) is that you're not interested in the end result. Big lesson here. When you get a job in IT, 90% of the work you'll do is on deadly boring applications. You know, insurance premium calculations; credit card reconciliations; theatre booking systems; parcel tracking. Not things you'll want to spend your spare time playing with. If you're only into programming because of what it can achieve, you'll struggle to do it commercially. Take it up as a hobby and create wildly exciting games, sure. But if you want to enjoy your work, then learn to enjoy the process of development. Investigation, analysis, design, coding (and testing and documentation )
You said in an earlier post that you're disillusioned not just with CS but with life, that you'll never get to do what you enjoy. Hang around in this forum for a while, and you'll learn that there are a LOT of us here who absolutely love what we do (and it doesn't depend on which industry we're in). For many of us it's a dream come true to actually earn money doing something we enjoy so much. (Of course, no-one is saying it's all perfect 100% of the time!) But if you don't enjoy the activities involved in CS but only the end result, maybe it's not for you.
|
|
|
|
|
I have long complained on here about how CS/programming is taught. I've been programming haphazardly since I was a teenager, professionally for 15 years. I got my bachelor's in CS 2 years ago. I'm working on my master's now. I learned nothing in my classes. The classes/degree tell employers that you 1) have some knowledge, 2) can jump through hoops - both of which are required for ANY job.
I agree with the an above post that the process is most important. Did you start from scratch, debug that code and create a monstrosity that worked? Then you learned something - don't create monstrosities Clean, simple code that is easy to maintain is best for most projects since there is always someone else that will be looking at it. They never teach this in school. A book about code smells (and how to prevent them) would be more helpful.
Also, the point of all those exercises to recreate algorithms is to learn the details of how they work, their pros and cons, differences between them. Schooling is usually more about theory than practice.
In the real world, the creativity is there. I call programming art & science. I hope you enjoy it as a job, even if you don't enjoy the schooling part.
Bond
Keep all things as simple as possible, but no simpler. -said someone, somewhere
|
|
|
|
|
Thank you
modified 3-Jun-21 21:01pm.
|
|
|
|
|
gah I shoulda read more replies before I posted.
Elephant elephant elephant, sunshine sunshine sunshine
|
|
|
|
|
I actually cook at home myself. You'll find a plethora of recipes for pizza crust alone. You can find all sorts of regular flower based ones, all sorts of keto ones, etc. There is absolutely NOT just one recipe for pizza.
When I use recipes I do what you should do for coding. I look up a recipe and find one close to what I think is a good starting point. I try it once and if it's working I modify it to my liking. If it doesn't work then I either eat it anyway or toss it out and find another recipe.
If you've ever spent time doing code katas (which are pretty much college problems) you'd see that you can do the same problem with several approaches, just like your pizza. Take Gilded Rose for instance. You can solve the problem once looking to practice SOLID principles, again thinking about using functional programming, again with something like javascript where there are other cool techniques you can use. I've used coding katas for company events and I can tell you that the same problem has many solutions.
Sure the basic algorithm may not change in a lot of cases but that doesn't mean the implementation is exactly the same.
You're partially right that we do have some things that are the same. Algorithms and design patterns are there for a reason, but the implementations are not always the same. You can take one algorithm and implement it in wildly different languages. Though the same thing (pizza) is begin accomplished, the recipe and steps are varying.
If you don't learn to solve problems, you're goina have a bad time. If you rely on libraries you'll be using a hammer for you're only tool. Which data structure is best for which situation to implement an algorithm? What do you do if performance or resources becomes an issue if you only know one way to think?
This question seems like it's coming from a position of "I already know what I'm doing so why should I have to learn". I think you need to calm down, let your ego go, and start trying to learn. Otherwise you're going to have an unpleasant time in the field.
Elephant elephant elephant, sunshine sunshine sunshine
|
|
|
|
|
I don't know why people assume that. Maybe big egos are that common in this field that you assume that I think I'm to smart to do those algorithms. No, this is not at all what I meant. I find them hard, and mostly I find them boring becuase of how they are taught, which make them even harder. I don't understand why books on Java focus only on libraries if building algorithms from scratch is that important. Believe me I didn't find yet a book on Java which would even touch on problem solving. I have even an impression that the authors are teaching: "Don't even bother. Here. Look at this library". That's why I'm shocked... becuase if it's so important why do I need to learn Java-libraries? Or do I even need to learn them? Becuase now I'm confused... Besides my message was about creativity in programming field. You can think that you are creative by doing your own version of someones game but this still not a creative job, just as you can come up with your own solution to cleaning a toilet as a housekeeper but still housekeeping is not creative job. Being a musician or a writer is creative careers. Of course there are programmers who are like artists like game or appdevelopers, AI-programmers, people like Bill Gates but an usual programmer is just a walking Scanner and you have to have a big ego if you don't realize that just by sitting and maintaing someone's system, who someone really creative made, makes you creative. No, you just as creative as a housekeeper who choose a different detergent for a different toilet seat. There is no creativity in being an office guy who just follow the instructions from above. This is what I mean that I don't enjoy in programming.
modified 3-Jun-21 21:01pm.
|
|
|
|
|
I think you are getting into the wrong field. You may want to try something else. You are making big assumptions for someone with no knowledge or experience.
Elephant elephant elephant, sunshine sunshine sunshine
|
|
|
|
|
Well, I don't have to have experience or knowledge to feel like programming is not enough creative for me, just as a gay man don't have to have experience and knowledge about women to know that they are not enough attractive for him. For a heterosexual man this can sound like an insult: "How can a woman not be attractive?" But guess what? Yes she can, depending on who you ask. The same with programming, maybe making your own versions of other peoples programs is creative job for you but not for me. I come from creative background so please stop assuming I have a big ego. I made music before CS, that's why I know what creativity is about. When I made music no one told me which genre I have to make and what kind of instruments I am only allowed to play and what musical scale I only am allowed to use and no one forced me to only play other peoples music. Do you understand what I mean by creativity? It's not being bound by other people's instructions and restrictions. Well, I never got paid for my music, maybe if I copied and paste other people's music I would be succesful but still that was called working creatively.
modified 3-Jun-21 21:01pm.
|
|
|
|
|
I think comparing it to sexual attraction is quite a bit of a stretch.
Also what you are describing is just a lack of experience in computer science. That's why you don't know how it is creative. Just like you couldn't make your own songs or music before you learned the theory of music. In fact in order to learn that you must first copy other peoples work and practice it until you get good at it.
Learning music or to play an instrument takes lots of repetitive practice of things people have already done. If you don't have the discipline to get through that then you won't be a good musician. Lots of people play other peoples music but never learn to create their own. Just like programming.
Elephant elephant elephant, sunshine sunshine sunshine
|
|
|
|
|
|
Eesh, this is why I had to stop making pizza; got tired of copy and pasting pepperoni from other companies.
On the serious side, look at your pizza analogy a different way. Each ingredient is a piece that has already been solved. You might not care how that cheese or pepperoni came to be, and you'll probably not have an improvement on how it's made, but you know it goes on that pizza. At some point, you learned how to use that ingredient, and why you might want it in the first place. You likely know what makes a good pizza topping, and what does not. In some cases, maybe you'll want to make your own dough. Are you going to reinvent dough into something the world has never seen? -of course not, but it can still be satisfying to make, even knowing others have already done so.
At the end of the day, appreciate the learning of why you might want that/a solution, rather than just, "I know where to copy the answer from." Your creativity will certainly not suffer.
modified 21-Oct-20 14:18pm.
|
|
|
|
|
But this is the problem. If I sweat and work on my solution, I usually come with the same solution that many people just memorize and learn how it works and it's not different from my code which make me sit from the early morning to the latly night to write it and in the end of the day, the teacher will probably think that I also copy that from somewhere. Not even at real exams I can prove that my hard work was worth it. When I fight with some problem because I want to come up with my own solution, someone writes down what he/she memorized from a tutorial or a book and he/she gets better grade. This is what I hate about those algorithms, they don't measure your knowledge anyway. Making your own program shows that no one did it, you invented yourself.
modified 3-Jun-21 21:01pm.
|
|
|
|
|
Kris Lantz wrote: In some cases, maybe you'll want to make your own dough. Are you going to reinvent dough into something the world has never seen? -of course not What? Are you calling it "making your own pizza" when you are not making your own dough? And are you not experimenting with the dough? Different kinds of flour, adding sesame seeds or nutmeg or shredded coconut meat?
Pizzas invite to experimentation, both in the dough and topping. Woody Allen taught me to use coconut in the topping (although I believe his joke was referring to a whole nut).
I haven't made a pizza according to a "recipe" since I was a schoolboy. I never will. I may glance through lists of ingredients to see new and exciting combinations, just to get some ideas. I never try to copy someone else's work.
|
|
|
|
|
Coconut. On. Pizza. You Madman!
My wife would murder me if I snuck in coconut on a pizza. She hates the stuff. I decided to look at other people's coconut pizza answers, and some actually do look great! I'm a fan of coconut flour in particular, so I may have to give some pizza dough creativity a whirl.
|
|
|
|
|
Member 14971499 wrote: Like Conways game of life. it has only one solution. I can't be creative and maybe use a while-loop or just one loop. No, this problem has only one solution - 4 loops. Actually, I never realized that. But if you say so...
So use your creativity to expand the game. Make the board non-flat, but like a cylinder. Or a torus. (Sphere shape is more troublesome!) Se how spaceships behave when they have made the round and return to the base. Or you could make life cells of two colors, and define rules for behaviour when cells of different color meet. Do they ignore each other? Merge into hybrids? Kill each other?
Make some minor adjustments to fertility. Introduce small fluctuations (by a random generator) in fertility. Make a competition by splitting a (finite size) board into two or four equal pieces, maybe with a DMZ between them, and let two or for players set up their artillery to shoot down the others. When the situation stabilizes, the winner is the one having most live cells in his part of the board.
If you are truly creative, you sure can make up a lot more variations on the Game of Life.
|
|
|
|
|
Member 14971499 wrote: Well, I have few books on problem solving. But how helpful are they when I have a problem with only one solution?
If you search for an answer to a problem and copy it, you have learned nothing.
If you solve the problem on your own, you have learned something. It doesn't matter if 100,000 people have already solved that problem -- you used your problem solving abilities to produce a solution. You have expanded your own abilities, at least a bit, and proven that you can think. Plus, you now understand that bubble sort, and possibly why it works and why it's inefficient for large data sets.
You appear to have a complete lack of understanding of what professional programmers do.
The short answer is we solve business problems. It doesn't matter if the program is a game, a commercial web site, a management application, or an esoteric laboratory tool -- it's a business problem in the most basic terms. The programmer is paid to achieve a goal, not to solve complex problems and reach enlightenment.
It's not always cool, it's not always sexy. Mostly it's not. Programming can be grunt work, frustrating grunt work.
Sure, if I need a bubble sort, or a shell or quick sort -- I copy it. Or use a library. Why? Because I'm long past the learning stage and have written dozens of sorts to solve immediate problems. I learned those lessons decades ago and there is no value to my employer for me to write one.
When I make pizza, I don't use a recipe. Why? Because I've made thousands of pizzas and I make one without having to think about what I'm doing. I solve the immediate problem (needing a pizza) using the tools (ingredients) I have at hand utilizing my experience.
|
|
|
|
|
Here's a food analogy for you: Do you expect to be a master chef from the first day? Or a concert violinist? No. First you have to learn to make the standard sauces. First you have to practice scales. There is only one way to do these things, and you have to learn to do them right and repeatably, before anyone will pay to eat your cooking or listen to your performance. That there is only one way to do these things is actually a feature, because it allows you to check that you're doing them right. If you don't think doing them right is important, you are in the wrong degree program. Perhaps sociology...
The library of algorithms in Java will take you only so far, just as a recipe book will only take a master chef so far. Following a recipe makes you a cook, but not a chef. Using only the pre-written algorithms makes you a junior programmer, not a principal engineer.
If you don't like all this learning and practicing, better find a new career path quick, before you have spent too much time and money on CS.
|
|
|
|
|
Even with GoL, there are multiple possible approaches. The 4 loop algorithm you mention doesn't scale to dimensions higher than 2, nor does it work too well for hexagonal packing (where the grid is a honeycomb pattern, rather than a rectilinear layout.
Possible other implementations include using a neighbourhood list, and recursion (to handle arbitrary dimensioned rectilinear layouts).
What are the performance tradeoffs for each of these algorithms?
Etc.
|
|
|
|
|
Undergraduate classes are like having a job where you get sent on courses as part of a training program. Only graduate students get to have ideas of their own. Unless you're Einstein.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it.
― Confucian Analects: Rules of Confucius about his food
|
|
|
|
|
i can see you joined yesterday so there is only one possibility that you are not a troll.
if you are a person who is concerned about his future asking himself did he made a mistake to enlist in CS.
i will try to help by being honest, per my experience.
those problems and algorithms that you learn and examine in school, 99% of the time are going to be THE ONLY interesting stuff about CS in your lifetime. unless you are a very very lucky person to end up working in research of some kind...
as a CS your job will most likely be to maintain/create/repair some insignificant boilerplate class made by God knows who, left, then maintained by some other unknown and a couple of others who left the place before you have arrived to work and make a living out of it.
and by insignificant i don't mean to measure it by size, because believe me it's going to be huge.
insignificant by it's purpose, because the would would been just fine without it and the many millions of classes of that type made by the competitors of your future company. it's just a working place so you have to do something.
truly great software is made very rare, but it is all around us. it's what's makes the world run.
i would enjoy working on the algorithmic problems they teach you at school (be that sorting, searching, AI, encryption, compression, fractals.. ) for the minimum wage, than this corporate stuff of adding new features and repairing bugs in applications that have thousands lines of code that don't solve anybody's problems even if it had been working.
to finish.
imagine that there is another civilization on Mars or Saturn and imagine it any way you like it. another type of society totally different than what we have here (capitalism, socialism, feudalism or whatever).
those algorithms at school are going to be probably the same on Saturn or on Mars. also the programs that would run the supposed rockets from Earth to Mars and theirs from Saturn to Earth.
but the other 99.98% of every day programming work that is done on Earth will be worthless on Mars and Saturn, no matter how much important it makes to feel the people that do it.
best of luck
|
|
|
|
|
Thank's, actually I would be happy if i wouldn't have to do those algorithms, and even worse to come up with my own versions of them by the deadline because otherwise Im done as a programmer.
modified 3-Jun-21 21:01pm.
|
|
|
|
|
The purpose of memorizing algorithms is to give you the tools to solve higher-level problems. In over 99% of the problems that you face while programming, you will find that someone has solved parts of the problem. It is up to you to decide how to string all of these parts together.
As a simple example, assume that part of your requirements involve producing a sorted table of data. The constraints of the problem affect how you will sort the data:
- Do all of the data fit in memory (RAM) at one time?
- Is additional memory available?
- Is additional disk space available (beyond that required to store the data)?
- Performance issues - time, power usage, etc.
Each of these constraints affect the choice of sorting algorithm, and may in turn affect other parts of the design. It is your duty as a designer to choose the best ways to perform the requirements.
The challenge of software engineering is not in writing basic algorithms, but in putting them together to create a working program.
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows.
-- 6079 Smith W.
|
|
|
|
|
Daniel Pfeffer wrote: , but in putting them together to create a working program.
Social Media - A platform that makes it easier for the crazies to find each other.
Everyone is born right handed. Only the strongest overcome it.
Fight for left-handed rights and hand equality.
|
|
|
|
|