|
Member 14971499 wrote: Now I wonder how you apply bubble sort and Conways game to that?
You don't.
If I may use an analogy from another field, every carpenter has to know how to drive nails with a hammer. However, building a table requires much more than that: selecting the right sort of wood, measuring, cutting, assembly, finishing etc. Learning how to write bubblesort or Conway's game of life is similar to the toy projects that you are given while learning to be a carpenter. They are not too hard for a beginner, and they teach you something about coding (or carpentry).
If you are self-taught, this sort of approach may be frustrating at first. However, a good course will use even these simple projects to teach good practices such as code factoring, documentation, etc.
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows.
-- 6079 Smith W.
|
|
|
|
|
The idea isn't to copy and paste other people's code, but to write it yourself. Things like algorithms for sorting don't require large programs and, by building small ones, you will acquire the skills to build larger ones. That said, it sounds like you've already done a fair bit of coding, so you may find this tedious for a while. If so, it won't stay that way and is just something you have to endure for a year or two. Once you get to your 3rd or 4th year, you will be able to work on more interesting projects, such as compiler or operating system components. If you find things easy right now, you should also have extra time on your hands, in which case there is nothing to prevent you from working on your own projects. Many articles submitted to this site are written by people who do exactly that. Many of them have retired but still code and write about it as a hobby. I'm one of them.
P.S. As an aside, no one wins chess tournaments by memorizing opening lines. I'm an average tournament player and, believe me, it's far from that simple.
|
|
|
|
|
But the question is then, so what are those libraries for? What is the point of reinventing the wheel? I understand if talked about problems in real programs, not some exercises that you will only see on the interview and CS-exam. I feel like I waste my time... Why learn something that you have to forget about after you get your job. Because dont tell me you do bubble sort at your job, when you have all those libraries? Or are making Conways game of life? Why not learn solving problems that I actually meet at my future work? Becase time is money, and I feel like I'm wasting my time...
modified 3-Jun-21 21:01pm.
|
|
|
|
|
You have to be given problems that are simple enough that beginners can do them in a reasonable time: a few hours (because if they can't do it in that time, its' not going to get done at all!)
If you were given as your first task "write the code for an industrial inkjet printing machine for traded- and consumer- units, including the user interface to this 50 page document" you'd go "Urk!" and abandon the course.
Beginners don't have the skills to analyse a problem, design a system, implement it, document it, test and debug (repeat as necessary all previous stages as a result), cope with spec changes on a daily basis, ... all the little bits that "real world" developers have to do all the time. And even if they did, they don't have the time, and teachers don't have the time to mark it effectively for a whole class full.
So teachers set little problems you can do, and work up to more complex problems that build on the basics slowly enough that you don't feel overwhelmed.
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
"Common sense is so rare these days, it should be classified as a super power" - Random T-shirt
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
My impression is that he's in a world of copy-and-paste. He may think of it differently. He may describe himself differently. His first source is to see what someone else has done and copy it.
I'm one of those self-taught types. Wallowing in errors - and the thrill of solving one - and even more, all the stuff learned in solving it. And - like "way back when" with a paper encyclopedia or dictionary: after you look something up, how can you resist looking at some other things that followed it or preceded it since, after all, the book's already opened and before you. In C, I looped through an array using indices. Then I came across someone incrementing a pointer, instead, and using that? Why? It was a tool in my mind for recursive functions (like English-to-Piglatin converter). So much overhead just went away. Ah Ha !
Even his complaint is a rehash of Ecclesiastes. The difference, of course, is that Solomon experimented with changing his views and developed insights.
As you know, I occasionally get harsh - but this guy's so full of himself. It is the one facet of his arguments that is consistent.
Admittedly, I follow the philosophical hubris of Hannibal:
"If I cannot find a way I shall make one!"
(or know the reason why)
Ravings en masse^ |
---|
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "If you are searching for perfection in others, then you seek disappointment. If you seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|
|
There is an argument for ignorance being really useful - not only for debugging, where describing a problem to a moron can really help you work out what you did wrong, but also in the sense that if you don't know something can't be done, there is no barrier to your trying. And sometimes, just sometimes, you can get it to work and then it was obvious all along!
I've done that a few times, and it's wonderful when you have the impossible working ... but most of the time you fall flat on your face, or set fire to the desk by accident
But this one comes over as a child: he wants to be handed solutions but he wants to "solve" really complicated problems without the effort of learning how. Sad really - particularly since it's costing him a lot of money to ignore the opportunities he has in front of him.
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
"Common sense is so rare these days, it should be classified as a super power" - Random T-shirt
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
At first, I wasn't going to keep extending this but I happen to probably make my living, to no small extent, off of governance.
I wall readily admit that it would not be difficult to find a "better" programmer than me. I have learned, in a way, a patchwork and much of the theory . . . I don't even know what I don't know. Actually, that was also true in the world of Chemistry.
But in the latter, having never taken a course in catalysis or surface chemistry I came up with the idea of Induced Surface Ensembles on Transition Metal Surfaces. Inspired by a (fired) mathematician that was sitting next to me who told mine (ironically in this current context!) about predator-prey games. Computer modeled (Monte-carlo 2-D surface simulatation), proven experimentally as well, and patented by employer - and Marcel-Decker wanted me to write a book on Computer in Chemistry. All this in a bunch of field in which I was, well, truly ignorant. In grad school, I invented several pieces of equipment (simple stuff) that became staples because they were such an improvement over what had been done (literly, orders of magnitude). &etc. Some rather famous persons, such as Gabor Somorjai[^], wanted to work with me - ignorance on their part !
Same for programming. One of the bosses here, now CEO, once said to me "what does every do here? Some give them some papers, they add something to it and give it to someone else. Everyone is doing the same thing." - hit me like a ton bricks as it soaked in. Especially since, at the time, I was reading about XML - and completely reoriented how I code. Not the fine details of it (a function of experience) but the global view. So - I work for an insurance underwriter. My applications are totally unaware of this. They'd work equally well for a restaurant or garage. Let the actual data accessorize it into distinctions. Why should I care? On the other hand, all else being equal, if you built the same functionality, it would be gang-busters better in organization and probably performance.
So - as I've said before - I'm a paid problem-solver. Everything I know is applied to everything I do. That tired expression "think outside the box" - what box are they talking about?
Ravings en masse^ |
---|
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "If you are searching for perfection in others, then you seek disappointment. If you seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|
|
If you have an exercise where you have certain limitation. The teacher want you to make a game that follows strict rules, how can you experiment? Can you experiment when you drive a car? No, a car drives allways in the same manner. You can't experiment and put a gas when want stop the car. The same with Conways game, if you have to use 2d array, make it with one loop. If you make it using only one loop, I will come back here and tell everyone that I'm a clown and I'm sorry. Please, don't compare CS to being self-taught. As self-taught you do whatever program you like to, and read whatever bookm you want to, and you can experiment how much you want. I would love to do that. But when you take a loan and you have to find solution to a problem, where you are restricted by instructions than you can't experiment. Of course, you can sweat and fight with it but the result will be not different from someone who copied it from internet.
modified 3-Jun-21 21:01pm.
|
|
|
|
|
Such a narrow view. If you were a horse they'd call that a result of blinders.
So you re-code that new nemesis of yours, that game. You make the instructor happy. And at the same time, figure out how to enhance it - make it do more - experiment with it. In fact, you could learn how to leave 'stubs' in your code for later additions.
The thing is, the world is full of mindless hacks creating unimaginative code. Where I work, they get that quality whenever they outsource - particularly to "foreign lands". It's just the way it is. It's not that the people in those places are less smart - they just turned a craft into an assembly line and they get to produce products, accordingly.
Myself? I will argue with whomever wants me to build an application (assuming it doesn't fit into the abstract ones that can handle most things as-is). Ultimately, senior management gets my point and agrees - even if one of them is debating with me. I explain why until they understand - and if they still want something, OK. They all understand that it's easier for me to just code sh*t as people request it then to argue so it's done correctly. Loved? Maybe not. Respected.
So, your exercise is only limited by a narrow view of following the instructions to the letter. You can make more of it . . . or continue your path to the assembly line in some field of endeavor.
Ravings en masse^ |
---|
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "If you are searching for perfection in others, then you seek disappointment. If you seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|
|
I always try to come with my own solution to a problem in my homeworks, but it always ends up with me being late and looking like an idiot with low IQ becuase everyone already did it, and than I at least try to rush it make it as easy for myself as I can and I end up with the solution that is all over the internet and I look like a fraud. Maybe I'm an idiot? And should come up with something revolutionary in three days, but well I can't... and then I wonder: Why do I even bother? Why not just memorize those algorithms because in the end of the day it doesn't make a difference.
modified 3-Jun-21 21:01pm.
|
|
|
|
|
Please, don't compare being self-taught and CS. When you are self-taught you can experiment as much as you want because you do stuff that you want to do, and if you come up with a solution for bubble sort and Conways game of life on the way, good for you. If I could do my own stuff, and wasn't bound by the limitations of the instructions I get, I would do the same. But if you have strict instructions with strict rules and the deadline, and the loan than you don't fight and play with prewritten algorithm that someone already invented, because after few days of sweating and hard work your solution is not different from one that people copy from internet. And when it comes to certain algortihms you only can do it in one way, like bubble sort for example. But I understand, It hard for you to swallow that you're not smart just because you can implement other people's solution. In fact,you are full of yourself if you don't realize that and think that your implementation of common algorithms is your own.
modified 3-Jun-21 21:01pm.
|
|
|
|
|
OriginalGriff wrote: Beginners don't have the skills to analyse a problem, design a system, implement it, document it, test and debug Yet that is where they should start: At "analyze a problem". That is what software development really is about - far more than coding, testing and debugging it. Or, so it ought to be.
If you don't have to implement / test / debug, you can, early in your studies, analyze quite large systems and design the solutions - far larger problems than those you have the resources to code / test / debug.
While you are learning methodologies for problem analysis and solution design (at an implementation independent level!), you should, in parallel, learn implementation, testing and debugging techniques, applied to small, manageable problems for a beginning student. But that is not the main focus of a software developer's education. The problem analysis and (implementation independent) solution design is.
Modern education programs start with a typing course: Student learn to type "int main(int argc, char *argv[]) {}" first, and taught the finer details of lambdas, and only after that start asking what the problem is all about. That is to turn things upside down. But that is how we want it nowadays. Even if it is upside down.
|
|
|
|
|
I had actually one project that I hade to do for my school, and it was a small program that have different functions, but it was a whole program. This was the only thing I really enjoyed and loved to do and I learned much more about problem solving and algorithms than from those stupid exercises.
modified 3-Jun-21 21:01pm.
|
|
|
|
|
There is some truth to what you're saying, but it's also difficult to design "real world problems" that can be solved in a university setting. Depending on what school you're at, many of your instructors may not even have much real world experience, because there's quite a gulf between pure CS and software engineering. Many of your classmates probably wouldn't be able to handle real world problems at this stage anyway. In later years, there's typically a course or two where you work in teams, the same way you would in industry, because this introduces issues that don't arise when working on your own. The project that a team implements, however, might be something that's already been done, like a microkernel or a simpler version of MS Word.
|
|
|
|
|
I'm so mad at myself... I took a loan for be able to make this degree. I was so stupid, now I'm stuck and I have to continue that path to get a job. Well, nevermind I just memorize all those algorithms just to copy them from my memory and explain to the teachers and the interviews what it is that I copied - they don't even know the difference. Let them be glad. Let me copy and paste all this crap from my memory, and take money in the end of the day... Whatever... If there is something that you find you love to do, don't be too enthusiastic, it's a trap. You will never do in your life what you love to do even if it's related to what you love to do. Life is a torture, whatever path in life you take... Sorry for all those messages, I'm so disapointed with life...
modified 3-Jun-21 21:01pm.
|
|
|
|
|
Member 14971499 wrote: Life is a torture, whatever path in life you take... Sorry for all those messages, I'm so disapointed with life... |
I would very seriously advise you to seek help: talk to family and friends and don't let despair get the best of you. Pound for pound, grey matter and specially functioning grey matter is one of the rarest commodities on Earth and once you've be given a few pounds of it, you should take good care of it.
Getting back to your dissapoinmets with CS and without knowing anything about your program:
- Keep in mind that you cannot have any program tailored specifically for you. There are others in your class that might have different needs. Be considerate to them.
- There is no "perfect" method for teaching any science let alone "computer science". I put that in quotation marks because I'm not even sure it's truly a science or an art (Knuth titled his seminal work "The Art of Computer Programming"). Your instructor tries to teach you at the same time the syntax of a programming language, some basic data structures and algorithms and maybe give you a feeling for what real world problems might look like. It is hard to do all that. Be considerate of his efforts.
- There is always a balance between reinventing the wheel and blindly doing copy/paste from the Internet. Learn when you can get something already made and when you have to use your own grey matter.
To finish, let me tell you the story of my first program: first year; first CS course; language was FORTRAN (yes, I'm old). I meet a friend in second year and tell him I was bored with the homework (kind of like you) and he says "I have an interesting problem for you: write a program to find all the positions of 8 queens on a chessboard so that no one attacks another one."
I write the program and, surprise, it doesn't work. My logical conclusion is that the compiler has made a mistake and I decide to search for it. I get the assembly language listing of my program and start analyzing it. But to do that I have first to learn assembly. Then I start marveling at how the compiler knew how to translate program and in the process I learn about formal languages, LL(n) and LR(n) grammars.
Never finished my eight queens program but I've learned so much in the process. Don't get dispirited if you run into a silly problem like bubble sort or game of life. Turn it into an interesting problem if you can. For bubble sort read Knuth's volume on sorting an searching and try to solve some of his problems.
Mircea
|
|
|
|
|
Thank's It was intresting and funy story and nice advice. I feel much better after reading this
modified 3-Jun-21 21:01pm.
|
|
|
|
|
It lets you ace the Google interview process! My coding is entirely self-taught, and whilst I know I could learn about sorting algorithms, I never needed to. That is, until I tried interviewing at Google, and there some HR drone gave me technical questions that relied on one knowing the details of sorting algorithms for the majority of them. Capped off by a couple of other questions where the accepted answer was actually wrong, but given the interviewer was not technical, there being no possibility to point out where the answer was wrong, I think I managed a perfect duck's egg score (ie zero), in spite of more than 35 years of fairly intensive programming experience on quite advanced codebases.
|
|
|
|
|
There is no point "reinventing the wheel." So, if you need to do a bubble sort in c# then google that and take one that works. It's faster and easier, but of course test it.
However, most of software development is making specific business functions and you can't copy and paste that off of the internet.
Some pieces of code are reusable, and that's a good thing.
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.
|
|
|
|
|
ZurdoDev wrote: Some pieces of code are reusable, and that's a good thing. Quite so.
That's essentially why we make functions/procedures to begin with. And templates.
To get quickly (and safely) through the parts that are the same so that we may get on with doing the real work.
Ravings en masse^ |
---|
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein | "If you are searching for perfection in others, then you seek disappointment. If you seek perfection in yourself, then you will find failure." - Balboos HaGadol Mar 2010 |
|
|
|
|
|
I feel that the whole point of your CS training is that :
- One day, you may be placed in charge of maintaining and extending those very libraries which you are using today,
- For which you need to know the internals of how those libraries are written. This training is the drill for that.
|
|
|
|
|
One way of looking at this :
(using the bubble sort example)
Do you understand how the bubble sort works? ; do you understand the underlying algorithm it uses and how it behaves with small data size vs. large data size (google big O ... ), do you understand how other sorting algorithms work and how they behave with small and large data size (i.e. quick sort, heap sort ... )
When you are asked to do some simple basic things like that, it is only a building block upon the rest of your CS education.
I'd rather be phishing!
|
|
|
|
|
semantics.
Some people say copy/paste, some people say OOP.
If you can keep your head while those about you are losing theirs, perhaps you don't understand the situation.
|
|
|
|
|
Well, OOP is good in that sense that it doesn't require from you that you copy and paste it line by line. You just import some library and call an appropriate method so that you can focus on solving problems which aren't solved yet.
modified 3-Jun-21 21:01pm.
|
|
|
|
|
Member 14971499 wrote: I don't know what is the point of copying and pasting other peoples algorithms?
there are a number of problems which show up again and again in programming (call them patterns or algorithms or whatever). and as a professional programmer, you're going to spend a lot of time recreating them in slightly different ways, in different languages, on different platforms, forever.
might as well learn them.
|
|
|
|
|