No one teaches PROGRAMMING any more
-
cpkilekofp wrote:
Only a computer scientist can teach this.
this of course is just wonderful rhetoric from the many professors over the years im sure. chest thumping Computer Science faculty.
----------------------------------------------------------- Completion Deadline: two days before the day after tomorrow
I'm not a professor. I'm not an academic of any sort, never have been, but who knows, maybe someday after I retire I'll think about it. I specifically recommended texts of the sort that would allow one to become a computer scientist. Did you read that part, or stop dead at the first thing you found objectionable? As I used to say to my recalcitrant trainees for QA/Support jobs on the software I'd helped build, "Read ALL the instructions before you start." I recommend you read the rest of my post. Alan Turing and Frank Church never went to school for Computer Science. The first person to graduate from a computer science program was Stan Kelly-Bootle, the (former?) columnist for Unix Review - he was most certainly taught by computer scientists, yet none of them were degreed in computer science. How, then, did they become computer scientists? They pursued the study of computer science. They learned how to construct an algorithm, and studied their own and other people's algorithms, comparing them for resource usage, efficiency, effectiveness, etc. They used those comparisons to induce and deduce rules and patterns by which the true cost of an algorithm could be measured. They did many things for the advancement of their understanding of computer science that sometimes did not even require a computer, being mathematical examinations appropriate for pencil and paper. Knowing each of the object properties of a Windows Form object makes you a technologist, not a scientist. Being able to build a lookalike after studying the Windows Form object makes you a great programmer, not a computer scientist. Being able to really understand when to build the lookalike and when to use the available tool...takes a computer scientist. IMO :D
-
Christian Graus wrote:
I am considering changing careers
why that? If there is a lack of people who can do the job, then you are welcome to do it right. No?
Why is that? Because some developer in India told ME to stop whining the other day. This is how he put it: "An average developer in India earns the equivalent of $1000 USD a month, gross pay. If you want to match or beat that then I would be willing to bet you'd get the contracts in America. Otherwise, you simply wont". So....... thats what we're being reduced to people. We're being reduced to $12,000 a year employees. People in WALMART make about that. Mc Donalds. Borders. And they dont have 1/10th of the pressure. So, yea, I too am looking for a new career. This one has been pulled from under my feet.
-
I'll be interested to see the code for Halo 4 written entirely in Java... I did not say that you should write huge applications in assembly. No one in their right mind would try such a feat. I said that you should learn assembly before learning abstracted languages. If you do not understand how a computer works on a low level,you will never fully comprehend how it works on a higher level; and your code will suffer because of it. Learning Java or .NET without knowing assembly and C is like learning Calculus without understanding Algebra. You might say that nobody does that, but my college calculus classes would have begged to differ. Personally, I learned C++ first. But it was not until after I learned assembly that I truly understood C++. A prime example is the difference between a switch and an if/else structure. Keywords and classes and library functions are not magic spells that instantly execute in one clock cycle. If you do not understand what's behind the code you write, then you are no better off than a script kiddie typing out some HTML for his geocities.com page.
I have nothing against VB or .NET; all programming languages are respectable. It just seems that some languages attract one echelon of programmers, and other languages attract another echelon of programmers. :P
David I Hunt wrote:
Personally, I learned C++ first. But it was not until after I learned assembly that I truly understood C++. A prime example is the difference between a switch and an if/else structure. Keywords and classes and library functions are not magic spells that instantly execute in one clock cycle.
I learned AppleBASIC, then Logo, then C, then Fortran, then C++ then Java, then Prolog, then ML, then Motorola Assembly, then x86 Assembly... Yeah, starting languages are meaningless to me (except in a specific context I'll elaborate on in a moment). While each language I learned taught me a different nuance, each had their own place. Once I knew C, I could pretty much use any other procedural language. Once I groked OO (which didn't happen until I learned Java), I could do OO in any language that supported it. And by extension onward. Knowing the binary representation, or bytecode, for a construct like a switch or if/else may give you deeper understanding, but if you don't know what the hell you're looking at, it can actually do more harm than good. Do you really need to know that a switch is occasionally more efficient than an if/else sequence? I don't think so, most good compilers will figure that out for you, and honestly, if you are optimizing just for the sake of optimization, you don't get it. The first rule to optimizing is, don't. Do I really need to know if my atomic commands execute in one clock cycle? Does it really matter that it takes 40 cycles to execute a division on an x86 architecture as opposed to 2 cycles to do the bit shift? Not unless I'm trying to squeeze every last ounce of performance out of my gear. Besides, to really understand that junk, you need to get the instruction set manual for the motherboard you're coding for and I don't think they give those out for free anymore (I'd love to be proven wrong though!). Does knowing that stuff make you a better programmer? No. Does it make you sound l33t at your ub3r g33k parties? sure. If you have a solid foundation in understanding algorithms and data structures and you can competently implement them from pseudocode, you're far better off than someone who merely knows how to squeeze a handful of nanoseconds off a calculation by using fiddly code hacks and compiler tricks. I think the biggest nail in the programming coffin is that they removed GW-BASIC from the IBM bootstrap. If computers shipped with a built in programming language, I think the worl
-
i agree. i think it's because when WE cut our teeth on the stuff, computers were something you could understand more easily. back then it was assembler, turbo pascal and ms/dos. maybe c64 and basic. maybe Amiga and C. You could figure it all out yourself and the OS was not a huge monstrosity like windows or unix that we have now. Well, ok, the Amiga os was starting to get monstrous, but ms/dos? Easy. The languages were simpler, the OS was way simpler. What's simpler than load"*",8,1 ?? That was the whole c64 os right there :) Ok ok, well, screen memory for text, graphics mode for pixels, nice simple sound chip. Not too bad. I'd say, to teach programming now adayz, your best bet is with slackware linux and straight c. You don't program by plopping in a prebuilt class into a java dev environment. For cryin out loud, you should know SOME assembler coming out of college.
-
No. I do have strong opinions on immigration policy, but I was in no way "trolling" or had any ulterior motives. I guess my big point is that this is subject (teaching programming) is really part of a bigger set of interwoven issues: math and science education in the US and compared to other countries, university education for professional (read "useful") careers, international competition, brain-drain, out-sourcing, etc.
-
.NET and Java are definitely the problem, though ignorance is the cause of it. People go to "easy" languages for two reasons. 1) They are stupid. 2) The Pointy-Haired Boss is stupid and forced them to use "easy" language. There are some people who are just lazy, but IMHO, laziness is a form of ignorance. Bjarne Stroustrup saw this problem appearing a while ago and is focusing his efforts on trying to get schools to actually teach programming again. For anyone reading this who wants to learn to code well... start with x86/64 assembly any work up from there.
I have nothing against VB or .NET per se. It just seems that some languages attract one echelon of programmers, and other languages attract a much higher echelon of programmers. :P
David I Hunt wrote:
.NET and Java are definitely the problem, though ignorance is the cause of it. People go to "easy" languages for two reasons. 1) They are stupid. 2) The Pointy-Haired Boss is stupid and forced them to use "easy" language. There are some people who are just lazy, but IMHO, laziness is a form of ignorance.
You can say guns are to blame for gun killings, but someone has to pull the trigger. I pulled that trigger once. I told my customer at the time not to use C++ as the base language for their project, which was database-driven, but to use Access and VB because "the programmers are cheaper and more easily disposable." Four years later I was one of the two programmers struggling to convert that Access package into a Web application, so karma was served. My main point was that C++ programmers talented enough to do the work would also have held the company hostage, as in this area (southeast Pennsylvania, near New York City in the US) good C programmers were very hard to find and keep. VB programmers were and are a dime a dozen (though, curiously, the ones who are good enough to be good C++ programmers are still very hard to find...a finding that has been touched on in more than one post on this topic). The problem isn't the environment, the problem is that so many programmers are helpless when the environment doesn't provide a solution. The sort of skills a study of computer science produces cross all environments, define all environments, and allow analysis of the environment, its shortcomings and how they can be avoided, and its fine points and how to best utilize them. It's not the environment, it's how you use it that makes or solves the problem.
-
cpp.samurai wrote:
Therefore, blaming the situation on lack of jobs (out-sourcing) can't be right.
Outsourcing is not a function of lack of jobs, but rather a function of wanting to pay less for a given job. The concept of paying less for the same thing is not a new one, what has changed in the recent decade is more or less a lack of oversight, or lack of checks and balances, or how ever you want to view it... the result is less quality for less money. It hurts the real programmers in India, and in the USA and everywhere. There are more than enough jobs, and more than enough people to fill them. A given IT job usually gets on the order of 100 to 300 applications. Even here with all our restrictions we get 100 applications for any one job. But those jobs are going elsewhere because no one wants to pay us the money, or even you the money, they want to pay someone less than either of us makes, and not bothering to find out if they can do the job before giving it to them. The result is encouraging failure, and living with 2nd rate products, and in many cases 3rd rate products or vaporware because no product is ever produced for the money.
El Corazon wrote:
There are more than enough jobs, and more than enough people to fill them.
Can you explain to me exactly what this means? Aren't these mutually exclusive states?
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein
"How do you find out if you're unwanted if everyone you try to ask tells you to go away?" - Balboos HaGadol -
Hello folks, I'm de-lurking here to get some advice: I do have a formal CS background having taken a number of classes in CS while getting my BS and MS in EE and continued writing software for machine control for 15-20 years now. I will be teaching a class for our two home-schooled daughters and a handful of their classmates this fall using a text called "An introduction to Programming using MS VB 2005". The text book and accompanying teacher's handouts, class notes, work sheets etc are geared towards becoming proficient (at high-school level) in VB2005. My question to y'all is what would you do/teach/focus on to ensure that a proper foundation is laid for the kids to want to choose programming as a vocation later in life? Some thoughts I have would be to require to see pseudo code for each programming assignment prior to coding as a means to help them learn the abstract thinking required to become a programmer? Any thoughts? Thanks! Atle
modified on Tuesday, May 13, 2008 8:46 AM
Atle Bjanes wrote:
I will be teaching a class for our two home-schooled daughters and a handful of their classmates this fall using a text called "An introduction to Programming using MS VB 2005". The text book and accompanying teacher's handouts, class notes, work sheets etc are geared towards becoming proficient (at high-school level) in VB2005. My question to y'all is what would you do/teach/focus on to ensure that a proper foundation is laid for the kids to want to choose programming as a vocation later in life?
The Art of Programming by Donald Knuth can be used with VB 2005. It's not cheap, but worth ten times that. Build up to it by letting them create their own "shell" for use with later assignments. By the end, they'll be ready for the workforce (or for the seed programmers for your own startup ;-) ).
-
I'll be interested to see the code for Halo 4 written entirely in Java... I did not say that you should write huge applications in assembly. No one in their right mind would try such a feat. I said that you should learn assembly before learning abstracted languages. If you do not understand how a computer works on a low level,you will never fully comprehend how it works on a higher level; and your code will suffer because of it. Learning Java or .NET without knowing assembly and C is like learning Calculus without understanding Algebra. You might say that nobody does that, but my college calculus classes would have begged to differ. Personally, I learned C++ first. But it was not until after I learned assembly that I truly understood C++. A prime example is the difference between a switch and an if/else structure. Keywords and classes and library functions are not magic spells that instantly execute in one clock cycle. If you do not understand what's behind the code you write, then you are no better off than a script kiddie typing out some HTML for his geocities.com page.
I have nothing against VB or .NET; all programming languages are respectable. It just seems that some languages attract one echelon of programmers, and other languages attract another echelon of programmers. :P
Ouch! Halo in Java would be painful! I mostly agree with you - in fact, I think you have largely stated what I voiced in a different post on the same thread - I do agree that understanding in principle what happens when your high-level language code runs is what separates the 'script kiddies' from developers - on the other side of the coin, however, are folk like me: My first intro to programming was two weeks of digital electronics on the Navy's ComTran10 - designed to teach basic digital electronics (focused on hardware - didn't even have a CPU, just a couple of shift registers!). One day's lab was writing a machine code (yes, machine code, not assembler) calculation routine. Other than some personal reading/study, that was the last that I've touched anything that low-level. I also took a short "Intro to C" course at a local community college. Since then it's been VB, VBA, VBscript, and now C#, and entirely self-taught. I am, unlike some, very interested in the whole process, and in my own research have gained what I think is a fairly decent understanding of the way programming languages work, and what happens all the way down to the hardware level. Not programming in the lower-level languages hasn't prevented me from gaining that understanding. OK, so maybe I'm a bit unusual ... I think you did wrap up our agreement in your last sentence - '...all programming languages are respectable. It just seems that some languages attract one echelon of programmers, and other languages attract another echelon of programmers.'
-
Chris Austin wrote:
I had one guy get incredulous with me when I asked him how he'd implement a simple b-tree. I think we have lowered to bar way too much.
Hmm, I'm not sure I could answer that one off the top of my head. B-trees[^] are rather non-trivial, aren't they? Or maybe I just haven't studied them closely.
Leslie Sanford wrote:
Chris Austin wrote: I had one guy get incredulous with me when I asked him how he'd implement a simple b-tree. I think we have lowered to bar way too much. Hmm, I'm not sure I could answer that one off the top of my head. B-trees[^] are rather non-trivial, aren't they? Or maybe I just haven't studied them closely.
Having been responsible for maintaining a B-tree library specialized for our application at one point, I assure you that general b-trees ARE difficult to implement, but anyone with a course in data structures and a very brief description of what's going on should at least be able to make a stab at an approach to the problem. IMO, anyway. Anyone who can't, well, maybe they can be taught to code from spec - I once fed specs to myself and two other programmers for eight months, never leaving anything to the imagination, and it worked quite well.
-
The bottom line that many people won't like is this: There is a limited number of people who can be great programmers ever born. To a certain extent you can learn it, but only if you already have a natural talent to program will you be great. Some people will NEVER be great programmers, no matter what. Sorry. If you have the right talent and drive, you will take it on yourself to learn what you need to be excellent. Also, we will always need people who can write compilers and program at the lowest level. The fact that you aren't writing firmware doesn't necessarily mean you aren't a programmer. We need people who can program in very high level languages, and not everyone has to be a programming superstar. I don't feel bad about my career because of other crappy programmers. In fact, it makes it easier for us good programmers to stand out and advance.
eliboy wrote:
In fact, it makes it easier for us good programmers to stand
Yup. I have apps running for several years without a glitch. One builds up a clientel that look to you for solutions because they want it to work. That has the advantage that I'm listend to when I point out the differences between what the user wants and what the user needs. But - like my last job - replacements are apparently cheap. Mine was supposed to build a new version of the app I made in a year (it took me two, but that included learning Windows programming). It's closing in on four years and the new version is just coming out. This is after they've gone through a number of other programmers. It's hard to get managers (etc.) to understand that buying sh*t at half price still just amounts to buying sh*t.*
* apologies if any found this offensive.
"The difference between genius and stupidity is that genius has its limits." - Albert Einstein
"How do you find out if you're unwanted if everyone you try to ask tells you to go away?" - Balboos HaGadol -
Why is that? Because some developer in India told ME to stop whining the other day. This is how he put it: "An average developer in India earns the equivalent of $1000 USD a month, gross pay. If you want to match or beat that then I would be willing to bet you'd get the contracts in America. Otherwise, you simply wont". So....... thats what we're being reduced to people. We're being reduced to $12,000 a year employees. People in WALMART make about that. Mc Donalds. Borders. And they dont have 1/10th of the pressure. So, yea, I too am looking for a new career. This one has been pulled from under my feet.
UD wrote:
So....... thats what we're being reduced to people. We're being reduced to $12,000 a year employees. People in WALMART make about that. Mc Donalds. Borders. And they dont have 1/10th of the pressure.
I started thinking so, but a seriously large number of organizations who depend on the quality of their software for their livelihood are beginning to reject outsourcing and consultants, prefering to get and keep talent in-house, just like it used to be. You need to be able to demonstrate that you can think outside the box, though, as they aren't looking for spec-driven coders, they're looking for the ones who can write the spec and implement it to near perfection, and they expect that to show in your experience.
-
RTFM. That's how we learnt.
-- What's a signature?
Pete Appleton wrote:
RTFM. That's how we learnt.
I "learnt" before there was any manuals to read. ;) Back in the late 70's working for Quadram I had to write device-drivers for PC's running DOS 1.1 before there WERE any "how-to" books on the subject! You had to take the Microsoft (or IBM) documentation and provided source-code examples and learn the difference between the types of drivers and how to code them. Before that it was writing FORTRAN IV on a PDP-11 and CDC Cyber-74. RTFM? No M to RTF! mov ax, 4C00h int 21h -CB :)
-
I blame .net, intellisense and languages that make it easy for people to think they know what they're doing. I've seen a lot of drag n drop kiddies in the U.S. as well. :) But, yeah, outsourcing hasn't helped the situation out much.
- S 50 cups of coffee and you know it's on!
Steve Echols wrote:
I blame .net, intellisense and languages that make it easy for people to think they know what they're doing. I've seen a lot of drag n drop kiddies in the U.S. as well.
Imagine the power of Intellisense and such tools to those of us who DO know what we are doing, eh? -CB ;)
-
UD wrote:
So....... thats what we're being reduced to people. We're being reduced to $12,000 a year employees. People in WALMART make about that. Mc Donalds. Borders. And they dont have 1/10th of the pressure.
I started thinking so, but a seriously large number of organizations who depend on the quality of their software for their livelihood are beginning to reject outsourcing and consultants, prefering to get and keep talent in-house, just like it used to be. You need to be able to demonstrate that you can think outside the box, though, as they aren't looking for spec-driven coders, they're looking for the ones who can write the spec and implement it to near perfection, and they expect that to show in your experience.
25 years of development and, not only head-down/hands-on development, but business experience (across hospitality, accounting, financial, utilities, medical and machinery to name a few). I can read and understand a balance sheet and speak business as well as developer talk in one breath. I would consider myself a true hybrid. Yet, most dont care and the ones that do are waning quickly. But if you say that there are a large number of organizations beginning to reject outsourcing then who am I to deny it? I am hoping to come into contact with some of these companies soon. I hope the turn-around happens before I decide to go back to a trade school and learn how to wire electric into homes or build houses so that when the next housing boom happens, I am ready! Right now they're asking me to slash my rates or else they go to India, China, Vietnam even Lithuania!! And by slash rates I mean from $100/hr to less than $30, some even less than $20. After I take out healthcare, mortgage, car(gas), food and simple business expenses (software, internet, etc), there is nothing left from $25/hr. Nothing. Its crazy. Its backwards AND upside-down all at once.
-
I blame all those RAD tools like VB and (to some degree) C#. Pity, isn't it. But then again, RAD tools survive because of the market.
Stupidity is an International Association - Enrique Jardiel Poncela Die deutsche Sprache sollte sanft und ehrfurchtsvoll zu den toten Sprachen abgelegt werden, denn nur die Toten haben die Zeit, diese Sprache zu lernen. - Mark Twain
-
Hello folks, I'm de-lurking here to get some advice: I do have a formal CS background having taken a number of classes in CS while getting my BS and MS in EE and continued writing software for machine control for 15-20 years now. I will be teaching a class for our two home-schooled daughters and a handful of their classmates this fall using a text called "An introduction to Programming using MS VB 2005". The text book and accompanying teacher's handouts, class notes, work sheets etc are geared towards becoming proficient (at high-school level) in VB2005. My question to y'all is what would you do/teach/focus on to ensure that a proper foundation is laid for the kids to want to choose programming as a vocation later in life? Some thoughts I have would be to require to see pseudo code for each programming assignment prior to coding as a means to help them learn the abstract thinking required to become a programmer? Any thoughts? Thanks! Atle
modified on Tuesday, May 13, 2008 8:46 AM
Our two daughters are homeschooled also. Nice going! My daughters aren't interested in programming but I do have a thought: VB2005 would definitely be a good platform to teach with. What I would suggest, though, as you do it that you teach them some of the low-level basics of logic and program flow. You might want to spend a little time covering some older material like computer history - after all these machines for all their sophistication are really still Von-Neuman (stored-program) machines. If they can understand the concepts of variables, memory and conservative use of them then they will be more powerful than their counterparts who know nothing but "click-and-drag". Spend a lot of time on fundamentals, loops, program-flow - GENERAL stuff. All the sophisticated object-oriented stuff is fine, but if they don't have the basics down then they're going to write bloated junk. I've been at this for over 30 years now myself and am constantly amazed at how these younger kids glaze over when trying to understand the basics of writing good and reliable code. They just seem to want to throw the kitchen sink at everything and hope something comes out that might work. My 2-cents. -CB ;)
-
Bottom line, those of us who know not only how to code, but to write elegant code will always be in high demand. There are plenty of jobs in companies that use proper interviewing and weeding to find the diamonds in that mountain of sand that apply. I've never had a problem when I wanted to make a move.
-
25 years of development and, not only head-down/hands-on development, but business experience (across hospitality, accounting, financial, utilities, medical and machinery to name a few). I can read and understand a balance sheet and speak business as well as developer talk in one breath. I would consider myself a true hybrid. Yet, most dont care and the ones that do are waning quickly. But if you say that there are a large number of organizations beginning to reject outsourcing then who am I to deny it? I am hoping to come into contact with some of these companies soon. I hope the turn-around happens before I decide to go back to a trade school and learn how to wire electric into homes or build houses so that when the next housing boom happens, I am ready! Right now they're asking me to slash my rates or else they go to India, China, Vietnam even Lithuania!! And by slash rates I mean from $100/hr to less than $30, some even less than $20. After I take out healthcare, mortgage, car(gas), food and simple business expenses (software, internet, etc), there is nothing left from $25/hr. Nothing. Its crazy. Its backwards AND upside-down all at once.
UD wrote:
25 years of development and, not only head-down/hands-on development, but business experience (across hospitality, accounting, financial, utilities, medical and machinery to name a few). I can read and understand a balance sheet and speak business as well as developer talk in one breath. I would consider myself a true hybrid. Yet, most dont care and the ones that do are waning quickly.
If you're located in the Midatlantic States of the US, you need a few good recruiters to help (check out Indeed.com as well, it will explain itself nicely). Right now they're asking me to slash my rates or else they go to India, China, Vietnam even Lithuania!! And by slash rates I mean from $100/hr to less than $30, some even less than $20. After I take out healthcare, mortgage, car(gas), food and simple business expenses (software, internet, etc), there is nothing left from $25/hr. Nothing. Its crazy. Um, this was a subtle but important point of what I said: they want you IN HOUSE. $100/hour consulting work is dying rapidly as a result (one of the jobs I recently interviewed for was to sepcifically avoid retaining a consultant any longer than I needed to jumpstart my own project). They'll pay part or all of your benefits, but they want you as theirs, not shared, and right now salaries in this area are running $60-85k with benefits. This won't support your current lifestyle, I'm guessing, but it beats the heck out of $12000/year or "may I take your order, please?". However, you're not going to get rich doing it.
-
Patrick S wrote:
Little or no emphasis on languages; little or no emphasis on application development for its own sake. Lots of emphasis on algorithms and data structures; lots of emphasis on math.
With the exception of the math, that's the way I gather most CS faculties were oriented through at least the 80's & early 90's (if not the whole 90's). Lots of stuff (who remembers the name of that notation/language used for proving the logic of an algorithm?) that most graduates will never even think of again unless they land in some highly specialised area like NASA, DOD or purely academic CS. Most CS graduates were useless for the first couple of years while they learned how to actually apply the useful stuff they were taught & forget the arcane. I do wonder if it's gone too far the other way now though, too much reliance on pre-existing frameworks is bound to stifle innovation in some areas but with the ever increasing complexity of computing environments it is a practical option. Personally I'd like to see more emphasis on problem-solving & design, which has historically been (in my experience, first as a student, later as an employer) a bit light-on in CS faculties. As an employer, I'd rather hire someone who can conceptualise a solution, then find the best tool(s) for the job as opposed to someone who can make a specific RAD environment do backflips but I think I might be in the minority on that one. Also schooled in Engineering (though combined with CS so I saw both sides :) ), I might be a bit biased :) .
T-Mac-Oz
T-Mac-Oz wrote:
Personally I'd like to see more emphasis on problem-solving & design, which has historically been (in my experience, first as a student, later as an employer) a bit light-on in CS faculties. As an employer, I'd rather hire someone who can conceptualise a solution, then find the best tool(s) for the job as opposed to someone who can make a specific RAD environment do backflips but I think I might be in the minority on that one.
Maybe, but I'm finding shops that are looking for older progammers who have some familiarity with the bleeding edge but have lots of familiarity with solving problems. Then again, that's to whom I target my resume. My MSCS program was about to drop the Math course requirement after I joined, but I was able to use a math course due to a "grandfathering" rule. The course I took was Mathematical Modeling, which taught a bunch of techniques but was primarily aimed at teaching you how to start solving a problem by building models and checking them againsts reality - this made it the most effective "problem solving" course I took.