I was wondering what stuff do you guys think a CS major/programmer need to know to be competent overall, it can be either languages, concepts, algorithm stuff, math, etc...
Printable View
I was wondering what stuff do you guys think a CS major/programmer need to know to be competent overall, it can be either languages, concepts, algorithm stuff, math, etc...
I have moved this to General Discussions as it is not specifically about C programming.
What exactly do you mean by "competent overall"? Consider that you mentioned "CS major/programmer", yet not all CS majors become programmers, and not all programmers were/are CS majors.Quote:
Originally Posted by thefeedinghand
Wouldn't the process of getting a degree make you competent?
Years ago I used to be a Service Manager with a relatively large corporation with offices all across Canada... I wish I had a buck for everytime I saw proof that the piece of paper means absolutely nothing.
Example : Technician graduates well known college, somehow gets all the way through a 2 year training course without learning to solder. Lasted about 2 days.
Example : Computer tech graduates monster company's training course but mysteriously doesn't know what RegEdit is. Lasted about a week.
Example : (and my personal favorite) Idiot forges diploma and expects to get hired, then threatens discrimination lawsuit when he's not. Took our lawyers 3 minutes to get it dismissed.
Example : Guy who can barely put together a cogent sentence, didn't even make it through high school, sits down with schematics and fixes everything we thow at him for years without ever a single complaint.
In the real world after school that diploma is no more than an introduction and the only people who are going to be impressed by it are the ones with no skills in the given area (HR people).
The real skillset is not the ability to pass a test or having a diploma to wave around... It lies in understanding the concepts involved and knowing how to look stuff up when you need it.
Relevant, we were just talking this morning about a gentleman who basically hacked an Oce printer driver for another AEC firm here in town...yeah all he has is a GED.
Admittedly there are poor grads out there. But that's their fault; what they missed was the opportunity to gain a proper qualification, finishing their course with mediocre grades. For any decent student, a CS major will provide them with the necessary tools to be a competent professional.
He's actually a B student, I think he just purposely forgot the things he didn't care about...I think he'll be getting a rude awakening when he looks for a real job since everything can't be done on Python.
I think Mario was replying to no one in particular. I tend to agree education is what you make of it. People don't have to agree with that sentiment and insist that paper is worthless, but that is my answer to the question. CS majors should be competent in all those things OP mentions, and degree programs do cover those things.
Yeah. It was in fact a followup to your previous post (which I agree) in lieu of some of the replies you got. Should have quoted them.
To expand on the thought, I won't deny some courses may not be well structured, or some teachers may lack the necessary skills. I've been saying that for some time. But students ought to understand University studies in a completely different light than that of high school. This is the real deal; their preparation for a profession that hopefully will follow them for the rest of their active lives. In an University environment, they should look at themselves less of a student and more of an apprentice. The goal is not to get the necessary grades, but to gain the necessary knowledge and skills... and even go beyond their teachers, if they can.
Particularly on CS courses, there's really very few excuses to not do so because the knowledge and skills are so disseminated and so easily available outside their limited course plan and university environment, that not gaining a deep knowledge of their area can only be seen as an evidence of laziness.
So, when we observe that there's a large number of grads with very limited knowledge of their profession, we won't miss if we attribute them the blame for that before we even think about the system. I'd say it's their responsibility they didn't prepare themselves for the professional world. Their course, as bad as it may have been of an experience, isn't responsible for their performance.
...
An anecdote: I'm currently doing a business model for an acquaintance (a friend of a friend). He's finishing a business school Masters (not joking) and needs it for his thesis. Not only he chose a business area he has no knowledge of for his thesis, but he can't produce descriptive operational and strategic business models if he ever needed them for, say, convince an investor. So, this topic of conversation was strangely coincidental.
In a right-working world I would happily agree with you.
The problem is there's no way, short of doing our own testing, to sort out the ones who actually learned from the ones who skated through. Final grades don't even tell the story because some people get really good at passing tests but don't retain the lessons.
Then there's every boss's nightmare... the person who hasn't learned a darned thing since graduating. For some reason there's a certain group of people who see the diploma as "mission accomplished" and utterly ignore Mario's consternation to treat University or College as the beginning and not the end of their training.
However... when all does work as it should --which I consider to be an exceedingly rare event-- higher education usually does produce fully qualified people.
The problem is telling them apart...
Emphasis mine. I did not mean to suggest that the system is perfect and produces graduates with a 100% employment rate. Even schools won't say that. The problem is with the OP asking an impossible question, IMO, where he is asking about what specific, fundamental skills are under the umbrella of "competent". In our varied field, where you need to know all of those things to a different degree, I find it rather impossible to suggest you need 1 part this and 1 part that to be a "competent" CS major.Quote:
Originally Posted by CommonTater
If you go through higher education, you go from 101 to course complete, so it services you no matter where you are intellectually and you shouldn't (although preferred) have to be ahead of the curve. If that is what OP is worried about, then finish your degree and get employed. Congratulations, convince yourself you are competent.
I think problem solving skills, the desire to understand how things work and the ambition to see things through are the key skills for a programmer.
I'm average at the first, do enjoy greatly the second, and suck completely at the last. Admittedly, in a professional environment the third carries a weight of its own and is thus unquestionable. But, please don't be offended when I say that much of what is said about this matter is flowery speech meant to romanticize a profession that has nothing romantic about it. There's a tendency a little everywhere to write purple prose around the idea of programming, and with the years I'm getting more confused as to why.
It's tiring hard work, can become boring, in some ways repetitive, and only occasionally rewarding. Just like most other professions, the one and true requirement for competence is a genuine like for it... and a natural capacity to deal with its defects (aka, patience). Everything else, the encyclopedic knowledge, the nurturing of one's skills, the disciplination of those skills, all will grow from there. And you don't really need to like it that much. Just to like it enough.
Yet, nothing beats that feeling when you've finally written and tested a piece of code to find out that it works!!! :D
Testing is something I see lacking in the curriculum for CS. When I went to college the concept of testing wasn't really emphasized. Some teachers alluded to the idea that programmers are more or less "Special" and should be expected to crank out code after deep thought and have it " work. It wasn't until I actually saw testing used in the field that I realized college could have been much easier for me.
A new piece of code can't be expected to be error-free. Everyone makes mistakes and that includes programmers. Whether they're syntactic or logical, errors and bugs almost always exist in new code. That why mid-term testing is important. That's my opinion anyway...
Conversely, there is a problem that CS/SE students have -- and that's telling poor employers apart from the good ones.
Just because you've finished university or college, and work for a company certainly doesn't attribute you with "We know the right way -- the grads are awful". I'm not saying some (even most) of them aren't, but proportionately there is an equal number of poor employers who seem to sport the "just get it out the door" attitude.
I agree, but finding the balance between mathematics/science and software engineering is always going to be difficult. But who can blame them? Industry seem to have the same attitude, what else is a test team for? ;-)Quote:
Originally Posted by indigo0086
I am a current undergrad..and I say..nope.
First of all, I had only excellent programming teachers, especially for first year.
Our algorithms lecturer is so terrible, I figured they hired him because of his MSc or Phd. I didn't learn squat, same goes for the Maths lecturer (I want to shoot him).
Another thing with the lecturers or what the faculty don't always get..the exam papers are always the same. It is shocking. Have you ever wondered why students are having first class and second upper blah blah..it is because students learn how to beat the system. Look at the exam for year 1 07, 08, 09.. oh they're exact replicas! Just memorize the answers!
If you know someone who has a 1st class..it doesn't mean he is a genius..
Although, the weird thing is..many still fail :S
Now, to rant about the students. Jeez...some don't even have any idea what is happening at all. End of the semester and no idea what a Constructor is. I look for fellow students who want to do some personal programming projects, but I have more chance of winning the lotto.
We're the next Microsoft.
You know why Walter Pitts revolutionized the cognitive sciences and launched the field of Neural Networks? Obviously because he benefited from a rewarding academic background.
You know why Percival Lowell would see water irrigation canals and the presence of intelligent life on Mars? Of course, because he had terrible teachers during his academic years.
After 12 years in industry, I find that the skills I need on a daily basis are usually people skills. Bein able to work with different personalities, teamwork, and being able to see th big picture of what's being achieved and how you play a role in that are more important than sheer volume of technical knowledge. Being able to write decently is also important.
I believe that any knowledge you get your hands on, you should get.I'll tell you an example:
Back in Senior High School, a class existed called Math and another one called Physics. Both where useless to me at the time. I was saying things like " how this knowledge will benefit me in everyday life? Are vectors/determinants/physics rules any good? etc". Now, as my ambition is to become a game programmer, all of the above and more are a must to begin with making 3D games.
I work at a company with over 10 teams, each with a balance of Developers and QA. QA are responsible for exploratory, functional, and in our case web automation/testing. Developers are responsible for unit and code-level integration testing and automation. In smaller companies or companies that do one thing in their product a test team might be a valid resource, but I imagine larger organizations and those with multiple facets need to have developers that understand they are responsible for testing their code.
Just to throw two more cents into the can, I'm working on my CS degree on the side not that I think I'll gain some worldly knowledge that I don't already have, but rather as insurance in-case my current job goes under I have that piece of paper to help me bubble past the 50% or so applicants with no degree. The market being what it is causes any open position to be flooded by applicants, so I've seen some places instantly cut all applicants without at least a BS to get the list down to something manageable. It sucks that it comes to that because some of the best developers and hackers I've seen have no degree what so ever, but in a world ran by suits that piece of paper or even certificates do speak loudly.
I saw a video of a guy talking about it 1 week ago(I think it was in OS News). He was a major in CS in a big university and did a program to train kids in india with no math no theoretycal background just hands on experience. I can not findthe video I saw it in os news or something like that. He adresses the points you guys mentioned and explains in which cases the degree is important. Maybe one of you can have some luck finding it.
Oki I found it!
http://www.youtube.com/watch?v=Zt5EMnATY_Q
The next to last post was a 17 day bump and while the next one actually does not violate the old post rule (a mere 11 days) I'm still closing this thread due to the first bump.