|
For a brief period, I was a teacher at the first year of an undergrad CS course. Most students where stunned, because for them computers were: internet, games and editing on Word. When they realized what it was like on the other side of the mirror, many simply gave up.
|
|
|
|
|
Having attended a Technical High School in Computer Science and then the Polytechnic University, I saw that happen twice. Behind the mirror sent many people running away way before they saw code, flow charts managed that on their own.
GCS d--(d+) s-/++ a C++++ U+++ P- L+@ E-- W++ N+ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- r+++ y+++* Weapons extension: ma- k++ F+2 X
|
|
|
|
|
Well, I don't find it easy at all. I think that I wrote my message in the way that people misunderstand. I don't say those exercises are easy. No, they are extremly hard for me. Otherwise I wouldn't need to memorize them from the book. What I'm sad about most is that I don't have freedom to do my own programs and by that I don't mean building a compiler or a chess engine. I mean using my basic knowledge and my own logic to create something from the beginning to the end. And I don't mean a gps-system for a car or new facebook. I can make a whole textbased console rpg with only if statements, System.out.println(), and Scanner in java. So yes, it's possible to make simple and fun programs that aren't just pure algorithms. You don't have to be programming virtuoso to build whole programs.
But I know that it isn't what software engineering is about. That's why I'm angry at myself that I didn't check that out before I enrolled in CS-courses. I thought programming was similiar to art making, just you did it with the code. But in programming you must follow the istructions and your creativity is hardly restricted. Imagine if all artists were only allowed to make art by using a brush of certain size, from particular shop, from a particular shelf, made by a particular branch on a A4-sized- paper that only is allowed to be white and is made of a particular tree from a particular jungle and the only thing that they were allowed to paint was a tree with only brown and green paint. And imagine that there was an artist who wanted to paint a dog, and every other artist would bash him and say" Why are you so full of yourself? Paint a leaf first and than think about the whole picture" and he would answer: "But I feel like my creativity is chocked by all those rules. I feel like I'm only copying the same tree that everyone else does" and they would bash him again: " You just lack imagination! Who is forcing you to copy? Just stop do it and do it yourself, paint the leafs in brown color and the tree in green. See how many possibilities you have?". This is how I feel about programming.
modified 3-Jun-21 21:01pm.
|
|
|
|
|
I think you are missing the point. Using the karate kid as a metaphor, Daniel wasn't learning how to wax a car. He was learning a fundamental movement, by repeating it over and over.
You are not copying other people's solution, you are learning those solutions, implementing them, and hopefully understanding then.
Because in the real world, you will be using other people's code and you need to understand how you can use it *without* reading it. And when it fails, you need to know where to look.
Take coding guidelines as an example. You might think of them as boring and stifling creativity, which is not true. They allowed me to dig into to the source of a program, fixing bugs and adding features *without* having to know how the program works in excruciating detail. For the most part, I could be confident that changing a couple of lines would not cause havock.
These boring tasks are not stifling creativity. They are the essential bedrock on which your creativity can stand. Quoting Edison, "genius is 1% inspiration and 99% transpiration".
|
|
|
|
|
Building software using pre-written, debugged, documented and supported components is the smartest thing we can do as developers. We absolutely should not re-invent the wheel.
You can choose to be either a low-level component developer - this is a huge market. You would get to employ all your raw computer science learning and be as close to the machine as you can to derive maximum performance from your components.
Or at the other end of the scale you could choose to be a high-level business systems developer, where re-assembling and integrating large components to build business software which fits the precise requirements of the corporation is the order of the day.
All developer roles have their own unique challenges and I personally welcome having the wide choice of components, allowing me to focus on solving actual customer problems where business communication skills are of equal importance than coding ability.
My advice would be find your preferred level. Low, mid, or high, or something in between? Change jobs if necessary. The software industry is going to be around for a long time and is incredibly varied.
Read the 'Mythical Man Month'. Only 17% of any software project is coding. That statistic may help you find your ideal role.
Garry Lowther
CEO and Founder
TriSys Business Software
Cambridge, England
www.trisys.co.uk
|
|
|
|
|
"Maybe I should be a writer instead?"
If you want to do that then start splitting your thoughts into paragraphs. Your posts in this thread are too dense to take in.
|
|
|
|
|
This is a forum, not a book. And besides, you probably noticed already. English It's not my motherlanguage You don't have to read my posts anyway. Why are you torturing yourself, are you a masochist?
modified 3-Jun-21 21:01pm.
|
|
|
|
|
Until you retire, a "job" pays for your "hobbies"; which includes being "creative" (like a "writer").
The chances of meeting similar-minded on any given job are slim to none ... because they're all "on the job". And no boss will ever let an underling be "creative". Too much of a threat.
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
|
|
|
|
|
Gerry Schmitz wrote: And no boss will ever let an underling be "creative". Too much of a threat. I had a boss, where I work now, with that attitude. I pretty much ignored him and good results covered my ass. He eventually took one step too far - and out the door with him.
But - what I really notice is that, unless you've only had one job and this is your experience, you've had surprisingly bad luck.
For the most part, I've been encouraged to come up with anything that would help out "the company" because they new it made both of us look good. Also, it gives that feeling of job satisfaction when your ideas are considered a contribution. It's is (or is to me) part of the pay - along with the money. Indeed, that's pretty much all I'm good for in that, if they just wanted a competent drone, they could easily do better
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 |
|
|
|
|
|
Sometimes there's a place for a quick copy-paste because the problem is small and already solved. More often than not, though, I find that it's the reading of other people's code that leads to understanding and adaptation.
Depending on the level of experience and curiosity of the individual, the amount of existing code that person has been exposed to will vary a lot. There's little point in re-inventing well-architected wheels: the joy of programming (at least for me) is in solving new problems -- which is why I spend reasonable amounts of time automating stuff that I'm likely to do over and over, so I don't have to manually do it!
So remember that other people in your class may, right now, be finding this more useful that you. This is a good lesson for being on a team: everyone has different skillsets and experience levels, and you're going to come across team-members who need a slower pace than you do -- as well as team-members whose pace will make your head spin! Try to be patient with the former and learn from the latter.
There's also a reminder here that sometimes, some parts of your job are going to be a little mundane. Them's the breaks! Cowboy coders who flit from topic to topic, never fully completing anything and never doing a little "grind-work" do their co-workers a disservice and eventually do themselves a disservice in that they don't learn discipline or how to find the interesting within the mundane.
If you have a passion for coding, take this opportunity to learn how to stick out the times when life isn't all sparkles and rainbows, to take pleasure in the small wins within the mundane, to work with a team of varying ability. All of this will serve you well later.
------------------------------------------------
If you say that getting the money
is the most important thing
You will spend your life
completely wasting your time
You will be doing things
you don't like doing
In order to go on living
That is, to go on doing things
you don't like doing
Which is stupid.
|
|
|
|
|
This is the flaw in our education system and it's not just programming. This copy/paste mentality pervades our educational system.
|
|
|
|
|
It's worth noting that many programmers do "katas" all the time. These are small algorithm problems that are very similar to college projects. Game of Life is one of them.
You're not going to get away from doing problems that have already been solved. The trick is learning problem solving yourself so you get into that way of thinking. If you can't solve a problem then when one comes up that may not have a solution for then you won't be able to think through it (despite what you think now).
You also won't be able to find solutions to problems that DO have a solution already. If you don't know things like algorithms and design patterns then you won't know to use them when you see a problem.
Elephant elephant elephant, sunshine sunshine sunshine
|
|
|
|
|
You are very fortunate to have the opportunity to study COMPUTER SCIENCE. You may already be a fine and growing programmer, but you are choosing to approach this discipline from a different perspective and should expect to revisit some familiar ground as you do. Think of these exercises as opportunities to re-learn and reinforce some of your existing skills as you develop this new perspective.
At the CS101 level, you are not supposed to understand how these concepts provide the foundation to build the concepts that will come next. CS may begin with bubble sort and other familiar algorithms, but be careful assuming that it ends there. Wax-on/Wax-off Daniel-san.
Computer Science will give you skills and understanding to become a truly elite programmer and much more. While it is possible to attain some, perhaps all, of these skills on your own through hard work as a dedicated programmer, a CS degree is a well trodden path to excellence for those that are willing to embrace the journey to a higher understanding of this art.
|
|
|
|
|
"Wax-on/Wax-off Daniel-san."
Thank you for your answer, it was really motivating
modified 3-Jun-21 21:01pm.
|
|
|
|
|
I'm sure there's something in there worth reading, but by God, please have enough pride in the value of what you write to add paragraph breaks and craft your writings in a way that make them worth reading.
|
|
|
|
|
Can you really implement bubble sort from scratch? Like you sit on computer without internet and just give it a shot, yes it is known algorithm but can YOU do it? The same in other answer with pizza, receipt for pizza is well known, have you made one? Can YOU make a pizza, like not that you theoretically know there is a way to do it BUT MAKE ONE. Another comparison is, you know how to throw a punch, can YOU win a fist fight?
To be really creative you have to know a lot of existing solutions, otherwise you will think you are creating something new. Just like philosophy, why everyone is at least learning some ideas of Plato? Because everyone can come up with the same ideas on his own, now the question is how do such person know it really is an original thought? You can only know if you are creative and not reinventing the wheel if you know a lot of existing solutions.
In current world "everything is a remix", there is really small chance that you will create something totally "new". What people do is building on shoulders of giants, so you take those existing algorithms and remix them in ways that produce something improved. You totally underestimate those possibilities that are in incremental improvements. You also have to deeply understand those existing solutions to properly use them, and you have to re implement them as an exercise because that is the only way to deeper understanding.
I understand you are young and you want to make your place in the world.
Last one... To be a writer you have to read loads of existing books. You have to know patterns and algorithms of successful writers and you know what, you will have to copy and reuse those patterns and algorithms otherwise everything you will write will be garbage. Like that huge block of text, that is your rant, if you would read some books you would notice people use things like paragraphs. People were writing for thousands of years, coming up with something new and creative is as hard as with coming up with new algorithms. You still have a long way to go young padawan.
|
|
|
|
|
Yeah, I totaly understand what you say, but this is why I feel frustrated, because I feel like I only copying things in that way that i have to recreate them by looking at the book first. I'm sorry but I'm not that smart to come up with the solution by myself. Maybe I would if I hade a month of free time, but because I don't I have to learn from a book. And many wrote here that: "Then stop copying". Well, I don't copy, I write it from my memory and I understand them but it's still the same as in the book, that's why it's a copy. This is what I mean by saying that I feel like the only thing I do is copying and pasting. Becuase this is the only thing beginners do... I guess... Otherwise thumbs up to whoever is so intelligent that he only learned the syntax of the language and was able to implement all those algorithms without seeing them first in a book or in a tutorial.
modified 3-Jun-21 21:01pm.
|
|
|
|
|
Well you are setting up some unrealistic expectations.
You only have to accept reality, and doing boring non interesting stuff still has value.
|
|
|
|
|
Don't take this the wrong way, but I graduated before C++ was really being taught.
So I took a C++ Class from a local university. Now, I had well over 250,000 lines of C under my belt, and I remember once explaining the "Algebra" of pointer operators to the professor, and him taking some notes, saying "Wow, that makes sense now"... LOL...
But when I did my homework, I did not copy/paste any solutions. 1990s, admittedly...
When I did turn in my solutions, I had written Full-Board Test Harnesses that would test the software quite thoroughly, separate from the software itself. Because I was a BIT BORED with the simplistic assignments.
Meaning:
1) Stop copying other peoples solutions, create your own, debug them, and PROVE THEM correct
2) Solve tough problems without searching for the answer: Here's one:
Given a dictionary of words, and VERY LITTLE computer memory (an assumed constraint), output the dictionary in such a way that for EVERY Word on a line, on that same line, separated by a space is every word that can be created as an ANAGRAM (with the exact same letters) of the first word, and you have to find EVERY anagram.
Anagram: NAP/PAN, DIARY/DAIRY, PIT/TIP
3) Although it has been done, write a program that allows a user to visualize various sorting algorithms. Then TRULY identify the logic difference that separates a Bubble Sort from a Rock Sort.
(Most people actually write a Rock Sort, calling it a bubble Sort).
4) Volunteer. Go grab and rewrite an open source project (I did this at University rewriting a Grammar Tool from Fortran into C as an independent study and donated the source so many could use it).
5) Solve Real World Problems. Go find a company/business that needs your amazing skills and actually build their software. Learn to take specifications, determine needs from wants, learn to visualize a user interface that's appropriate to the CONSUMERS (not the programmers), etc.
You sound really smart. But you are MISSING the point.
All software is about COMMUNICATION:
-> The GUI Communicates TO the user
-> The Inputs Communicates TO the program
-> The program Communicates TO the database, and others through notifications
So, when I hear you complain about all of these cut/paste solutions. What I hear is:
I can't stand having conversations with people. They are all the same conversation, over and over.
It's truly because YOU are BORING, and you are trying to get the right answer. You have NO FOCUS on learning, experiencing, and truly listening.
Focus on those things, and you will NEVER be bored again.
Every day... Make SOMETHING better!
|
|
|
|
|
Maybe I sound smart, but I don't claim I am. I find those exercises boring, because they are hard and on top of that old and boring, which makes them even harder. You can teach hard things in easy way and just running pure algorithms just isn't engaging for me. For me a simple and fun game would be a snake. Conways game is boring. It's just boring for me. I'm sorry if somone loves this game, but okay I will fight with this game and I hope I come up with my own version. Wish me luck
modified 3-Jun-21 21:01pm.
|
|
|
|
|
Can I suggest that programming as a career is not for you?
There is an expression called "time in the trenches". Basically your first jobs in IT will be copy and paste, modify existing code, and generally very little creativity.
I'm mentored several junior developers straight out of uni (and one who is currently working for me part time whilst finishing their uni degree). One of the best attributes you can have is a combination of "I'll get it done" and "Have you considered this way instead". A note on that second point, remember that you're only starting out in the industry, so the answer to "Have you considered this way instead" might actually be "no, please do it my way".
Technically creativity won't come into play for many many years. Unless you're working on your own home project, you'll no doubt have both a manager and a customer. As a junior programmer you'll be dictated to over the type of code you'll write and how it'll look. Depending on the size of the project and how complex it is there will no doubt be an architect who has already made those creative decisions for you. Keep in mind that the architect has likely spent 20 years building IT systems and knows many pitfalls that you won't, and you're unlikely to find a company that's willing to let a junior spend 6 months making a mistake on a project just so that junior can learn something.
So basically, only continue going down the path of learning how to be a software developer if you're
a. Willing to spend time doing the crap jobs
b. Understand that it'll likely be years before your full creativity will be allowed to be on display
c. Understand that the world doesn't need more "glue programmers", a deep understanding of the code will be an asset in your career.
d. You're a junior (technically not even that yet), most of what you don't know you don't even know you don't know it. Learn, even if you can't yet see why, every great software developer has been down the same path that you're going down.
Finally, if you can't accept the realities of the industry, find something else do to as a career and keep programming as a hobby on nights and weekends.
modified 22-Oct-20 21:27pm.
|
|
|
|
|
The point of reimplementing well known algorithms at your stage is not that you copy and paste the solution, is that you learn how to solve a problem, being it well known helps you and the teacher to verify that your solution is correct, so even if you reach the same solution the book does (which may not be the only way to do it, as there may be better and more optimized solutions), you have learned how to think about the problem and solve it, and those that copy and paste are not learning anything besides how to copy and paste, and hopefully, how to Google the solution.
Also, even if the teacher can't differentiate your solution from a copied one, if you're asked to explain it, he will quickly realize that you dind't do it, or that even bothered to understand what it does (Interviews are a different bag, especially when done by non technical people).
"Science fiction is any idea that occurs in the head and doesn’t exist yet, but soon will, and will change everything for everybody, and nothing will ever be the same again." Ray Bradbury
|
|
|
|
|
When you were a child and wanted to open a tap to get water, you could just learn from your parents or friends and copy their action : turning the tap conterclockwise. That was the copy & paste time... Now you are a grown person and you are no more thinking about how to open a tap but why to do it.
I can say I'm an experienced programmer (47 years of developping applications of all kinds) and though I can write a sorting function from scratch (I may write it for my own pleasure!!!) I don't care about it; what is important is that, in order to make my new application work, I need to sort some kind of list and, then, I look for the simpliest way to do it. Doesn't matter by Copying & pasting or creating it or giving a young one the task to reinvent it (for it's own education), I just need to have the tap open so I can water my garden... And that is my real pleasure in life!!!!!!
|
|
|
|
|
my FAX machine does not work now and I need to fax a contract document to employer within limited.
I tried one iPhone app and it can send out fax document. it triggers a question: is it safe to send out my contract document?
how does that App work? is it functioning as a standalone fax server, or it needs to use the fax server of the app owner?
diligent hands rule....
modified 21-Oct-20 11:15am.
|
|
|
|
|
Is it safe to send a fax by any method?
|
|
|
|
|