The Case For the Blue Collar Coder
theodp writes "U.S. tech talent shortage discussions tend to focus on getting more young people to go to college to become CS grads. Nothing wrong with that, writes Anil Dash, but let's not forget about education which teaches mid-level programming as a skilled trade, suitable for apprenticeship and advancement in a way that parallels traditional trade skills like HVAC or welding. Dash encourages less of a focus on 'the next Zuckerberg' in favor of encouraging solid middle-class tech jobs that are primarily focused on creating and maintaining tech infrastructure in non-tech companies. Dash also suggests 'changing the conversation about recruiting technologists from the existing narrow priesthood of highly-skilled experts constantly chasing new technologies to productive workers getting the most out of widely-deployed platforms and frameworks.'"
This makes sense to me. Most of the best programmers I've known are guys who otherwise would be installing air conditioners, fixing big trucks or re-wiring buildings.
Coding is not a profession. It's a skill, which is a part of a series of job descriptions and career paths, but in itself it's a form of knowledge more like what an electrician has than what professionals like architects, doctors, lawyers and assassins must know.
Apprenticeship is an excellent idea since most of the "best practices" can't be taught at a school, and apprenticeship allows people with applied skills to shine, instead of schools where those with excellent detail memorization shine. Most of the best programmers I know either never went to school for it, or didn't do all that well at school.
Bring back the hacker aesthetic. Professions are for those who want to super-specialize and master specific high-level skills. Hacking is something anyone with the gumption and dedication can do. As the world expands into mobile devices, ordinary people are writing code every day.
That being said, CS needs to find a new career type that might belong to professions. I suggest "product architect" (like Steve Jobs) and "total systems integrators" (like what the Google guys do, interoperability) for those who will need college degrees or equivalent and a professional mindset.
It's been a blue collar job for most of us ever since I've been coding professionally (since about 2000).
Why would we want more un/under educated programmers? Programming is applied Math and very few high school students are going to be equipped to do it well.
There are 4 boxes to use in the defense of liberty: soap, ballot, jury, ammo. Use in that order. Starting now.
BTW The closest my school had to Computer Science was a couple of Commodore Pets and a maths teacher who thought all that was involved with CS was logic. Ah well where there's a geek there's a way :)
Build a Man a Fire, and He'll Be Warm for a Day. Set a Man on Fire, and He'll Be Warm for the Rest of His Life.
I have been arguing this for quite a while, there should be more apprentices and fewer university graduates with insurmountable debt, however this is not going to happen given the labour regulations, tax incentives, even inflation. All of these prevent jobs from appearing. A businessman doesn't need an incentive to hire people, his incentive is to make more money, it exists already. What he needs is not to have incentives to do things that are not actually useful to him. A business could have a bunch of apprentices, if it was possible to pay them a very low wage. As things stand (never mind the inflation, which kills savings and jobs), the labour law makes it illegal to hire people below minimum wage while still allowing to have students as 'apprentices' who have to work for free. All this does is incentivizes the kids to go to higher education, where they don't actually need to, while working for free as apprentices, while getting deeper and deeper into debt. Instead the kids must be able to skip school entirely and learn the trade at work making a little bit of money, that would give them an incentive to show up and do the work, while not getting into debt and learning the skills. This is something that businesses have always done before governments screwed this up.
MY OTHER COMMENTS
This makes sense to me. Most of the best programmers I've known are guys who otherwise would be installing air conditioners, fixing big trucks or re-wiring buildings.
There is a substantial amount of math and logic that should be used as a foundation for programming. I know the coworkers that would otherwise be installing air conditioners when I ask people if they thing we could use a more functional-type language for a new project instead of an object oriented language. You're usually met with blank stares.
Coding is not a profession. It's a skill
This could be said about anything that people pay you to do. Anything.
which is a part of a series of job descriptions and career paths, but in itself it's a form of knowledge more like what an electrician has than what professionals like architects, doctors, lawyers and assassins must know.
What? Look, I think you're trying to discuss what you feel is the percentage between creativity and regurgitation in each of the above subjects. And I will tell you right now that all those fields are diverse with jobs that require more than one of the other. If you want to say programming requires more creativity and that's something that cannot be taught then at least give me a compelling argument for that.
Bring back the hacker aesthetic. Professions are for those who want to super-specialize and master specific high-level skills. Hacking is something anyone with the gumption and dedication can do. As the world expands into mobile devices, ordinary people are writing code every day.
If only you could see the spaghetti code I've seen. Ordinary people are free to write code, in fact I love that and I hope that continues to expand. But when you're talking about commercial grade software being written for a company that is being sold to people for real money ... that's when I start to cringe that "good enough to tinker with in my home means good enough to be deployed to millions of personal devices across the world."
That being said, CS needs to find a new career type that might belong to professions. I suggest "product architect" (like Steve Jobs) and "total systems integrators" (like what the Google guys do, interoperability) for those who will need college degrees or equivalent and a professional mindset.
Personally I value my liberal arts college degree and I think my employer does as well. I can communicate better with customers and I now understand much more of the world now than I did in high school (when I thought I knew everything).
You're free to apply to jobs but when you're going up against people who have rigorously studied mathematics, logic, philosophy, English, etc you have to be ready to show an employer what you're made of before your application is automatically rejected by some routine resume sorting algorithm. It's not that those algorithms are correct, it's just that employers are too lazy to spend two hours with every single person on the planet trying to find the right applicant. Instead, if I didn't go to college, I'd buy a virtual private server and be going to town on developing things that look good so I can show them off. Honestly, I think it was easier, more fun and more eye-opening (yet way more expensive) for me to go to a liberal arts college. It's your life, so do what you want. You can tell the recruiters they're doing it wrong but then again it's their job and that's their decision. This sounds like some very talented hackers venting about the problems with entering into the workforce.
My work here is dung.
Why would we want more un/under educated programmers?
Because there is a lot of work that needs to be done that doesn't require a degree in computer science and people with those degrees tend to be expensive. You don't want under educated people but there is a cost to having over-educated people as well.
Programming is applied Math and very few high school students are going to be equipped to do it well.
Computer science is math whereas programming can be a bit more abstract than that. Programs are a set of instructions to a machine and sufficiently abstracted it really doesn't require deep knowledge of math for someone to do useful work. While ultimately any computer program can be reduced to mathematical equations, the actual programming often really isn't math from a practical standpoint. To use the simplest possible example, I don't need to know any mathematics to write "hello world". Up to a certain level, being able to instruct a machine requires little/no specialized training. Think of it a bit like saying that an electrician putting some wires in your house should require a bachelors degree in electrical engineering - the extra training would be pointless almost all the time. Lots of useful work can be done by those with less formal training.
In fact it's to our benefit to write tools to make simpler problems solvable by more people and free up those who are more highly trained working on more difficult problems. That said, there does come a level of sophistication where you need someone with more understanding of the underlying concepts. Just like a nurse can help you to a point but once the problem gets sufficiently complicated you need a doctor who has a deeper understanding of what is going on.
Sure, this would be great if programs required no math, were short, single threaded, didn't require complex algorithms, and didn't require interfacing to other things... but that isn't how programming works in the real world. If your design can be done by someone with the education levels or mental faculties of a welder, it can be done by outsourced talent more cheaply anyways.
What we need is more specialized, difficult, and deep CS programs, not programs that people can sleep through and come out of with little technical knowledge beyond Java application development.
while(1) attack(People.Sandy);
Why should someone pickup coding as a trade? They'd be on permanent unemployment due to the infestation of H1-Bs.
They've had that in Germany since the 1960's.
http://de.wikipedia.org/wiki/Mathematisch-Technischer_Assistent
Dash also suggests 'changing the conversation about recruiting technologists from the existing narrow priesthood of highly-skilled experts constantly chasing new technologies to productive workers getting the most out of widely-deployed platforms and frameworks.
Wait, no more bleeding edge hacking? What in the world is left for the sales drones to do?
Nae king! Nae laird! Nae yurrupiean pressedent! We willna be fooled again!
IT / tech needs apprenticeship not years of college with big skills gaps.
And the tech schools get dragged down by having to be part of the college systems and some of the college time table.
There is to much put on degrees and the name of school over real job experience and NON degree classes.
There are lots of people with degrees and big skills gaps and lot's people who have real skills but no degree or a tech school degree.
I was a hard core cross-platform, client/server C/C++ developer for over a decade. Basically, I wrote code for every platform except VAX. Before that, I wrote code for an extremely specific embedded space craft system and after that, I became a systems architect, software architect and enterprise architect.
Writing code in the real world is very different from learning to code in the class room. For small, trivial projects, like 90% of web sites, a community college coding trained person can be re-trained to be useful and productive. I teach at a local "commuter university" ... that feels more like a community college to me. The vast majority of students are confused by anything that is not memorization, but a few are brilliant and could easily compete at Stanford, MIT, GA-Tech, and similar tech-centric schools. These are the students that I try to help.
If the others don't switch to different majors, they will be flunked out after 2 yrs.
The lack of talent for software isn't really true, but talent wants to be paid better than average salaries and they want better environments.
I stopped coding because coding was only $75/hr (about $150K/yr) and I could earn $200+K/yr as an "architect." Wouldn't you switch too?
I also stopped coding because the schedules were always too tight - usually completely unrealistic for the tasks and I was tired of working 80+ hrs per week. .... only an idiot would remain as a coder given those choices.
As an architect, my work week became predictable - usually 40-45 hrs/wk. So, I'm working fewer total hours, more predictable hours, I have a greater input to system design and outcomes, and my true hourly wage $/hr is much, much higher
Coding is entry level for most people. Average people will eventually see their positions replaced by younger, cheaper entry level coders. Moving up and out of coding becomes necessary if you want a longer career in software or computer technology. There is always room for truly talented software people ... the top 5-10%. Many of those people, like me moved on to have more impact, more control and a much better lifestyle.
I miss coding, but I don't miss all the other aspects. As a coder, anything I wrote ... anywhere became the property of the company according to the employment contract. As an architect, that wasn't included in the contract. My hobby coding was mine. Another reason to leave coding.
I forgot to meantion, I went free-lance as an architect and bumped my pay plus I get 3+ months off a year. Usually I travel.
So, if you want "coding talent", the environment needs to change to be much more flexible, greater control over work schedules and time off.
Perhaps I've just been lucky. Perhaps my "talent" lies in being an architect, not with software development?
Perhaps I'm just a troll here pointing out how great it can be after leaving the coding daily grind.
One last thing - certain very popular languages have completely destroyed the software development as an art progression.
* Java - 90% of these developers are clueless. They really believe that the OS and physical machine don't matter. Idiots.
* Php - I learned to code by reading a book group. People that only learned php have become the destroyers of solid software development. The entry barrier became too low so that almost any idiot could get something working. There's a big difference between working, and working well AND securely.
I don't want to say that all php or all java programmers are idiots. There are some true experts and arteeeeests using those languages. It is the masses who program in those languages that are a waste and should be flipping burgers somewhere for the safety of the world.
If it's anything like the job market in Sweden they are most likely rejecting potential employees with four-year degrees because they lacked "core skills" in some in-house app which they helpfully enough made sure to first train a bunch of "consultants" somewhere else in (actually ran into this one once, the guy handling the recruiting didn't seem to happy about it but implied someone else had made the decision and he was honest with me about it, his bosses had paid to have Indian "experts" trained on their in-house software so they could pretend like they had to offshore their coding jobs (or rather, "import" Indians long-term) to get the required skills).
The employers here in Sweden are constantly screaming about the lack of qualified developers yet its not unusual to see junior web dev positions advertised as clearly only for people with at least a MSc in CS and a couple of years of industry experience. That's like demanding all your janitors have degrees in Architecture or Building Services Engineering...
degrees take to long and can cut out people who are not college material. But can do the job / handle Community Colleges and tech schools as they are a better fit for people like that and are have more hands on learning.
Also degrees are a poor fit for continuing education in the IT field.
Also there is a lot fluff and filler in a degree and it can be cut down to maybe 2-3 years or better yet for some parts of IT a mixed 1-2-3 years of class room and on the job apprenticeship.
"U.S. tech talent shortage discussions tend to focus on getting more young people to go to college to become CS grads"
THERE IS NO TECH TALENT SHORTAGE. What there is, is disinformation about what one needs to really
know to really program. Plenty of unemployed and students out there who have figured this out.
But they are blocked out of the market by both employers, employment agencies and state unemployment offices
who don't have a CLUE as to the nature of the skills needed and have created a ridiculous artificial set
of evaluative criteria.
In addition, there are brilliant programmers out there with no degrees or associate's degrees or liberal arts degrees.
Also, you do NOT need calculus to program or be a software engineer.
You do NOT need Dykstra.
You do NOT need to know how to write a compiler.
There is no "Blue Collar".... there are competent skilled programmers, reasonably skilled ones, screw-ups, and Ivy League graduates with big degrees who would not last a 10th of a second in real world programming. I know, I've worked with all of them.
There is one key JOB REQUIREMENT in this field. The ability to deal with the unknown, to learn and to adjust. Period.
Reading and communication skills are paramount too. Above all else.
From a retired Software Engineer of 32 years experience
The problem with looking at coding this way is too many people will fail. When you're looking for a vocation/apprenticeship the last thing you want is something risky.
It's also way too volatile. Training to be a "microsoft .net programmer" is insane. You're whole profession could get flushed down the toilet instantly.
All that education is necessary to constantly retrain yourself.
What I mean: the article says "let's not forget that we can do this, too!"
Can we? I've... never heard of anything like this. Which annoys me, because I'd really like to do it. I want to learn coding, but I am not a self-motivated hacker stereotype. I need a project given to me, and if I'm operating without guidance, there is a ceiling on the types of problems I can solve in a timely fashion. I'm not stupid, but I'm not brilliant either, or at least I haven't been called that since high school, (which I dropped out of) and generally programming is considered something only a supergenius should be allowed to do, especially by programmers.
I know this isn't true, as I've taken a programming course once at a community college and did well and enjoyed myself. But taking a course means I get to do a bunch of stuff that I never use because I can't find work related to it, if at all, and so I forget it. An apprenticeship is the only way I can think of that would supply me with steady work to cement the skills in my head. As far as I know, apprenticeships do not exist, because those who would be masters usually believe in the old-school cowboy hacker DIY-elitism. The most help they'll offer is "here's a book about a language you might be able to understand. Get to work, you pleb."
What work? I have no idea what I want to code! Just give me something.
You mean the next undergrad to drop out of college thinking he can change the world with one hot idea? Education would be wasted on the next Zuckerberg. Just introduce him to some venture capitlaist with money to burn and let the wheel of fortune spin.
I enjoy your comments on the site, so you'll get more than the standard drive-by response from me.
First, I'd like to make it clear that I am not scornful of these fields. Air-conditioning installing, building wiring, etc. are not devoid of creativity and intelligence requirements.
In fact, like programming, there's a huge gulf between doing it and doing it right that is determined by degree of intelligence and creativity.
You may find that intelligence level is the difference between the blank starers and the thinkers, if you look back over the years.
I'm not communicating effectively here. I'm not trying to make this a comparison of creativity levels, or regurgitation, except to say that I think education over-emphasizes regurgitation, which is not the skill that differentiates an excellent programmer from a hum-drum one. This was a statement I made in support of the apprenticeship idea.
Professionals are different from all other careers in two crucial ways: first, they must be able to handle a huge amount of detail and balance those details against one another; second, they are responsible for greater impact than most others, and as a result need to have critical thinking, leadership and human perception skills that are not normally required.
I'm thinking of doctors, lawyers, CEOs, architects and probably a few other groups here. I don't know if creativity is what is needed; most jobs call for inventiveness, or the ability to apply different forms with a bit of fudging so that new uses arise. But so does life itself.
Are we shuffling too many people into these professions? Yes, unquestionably so, just like we're sending too many people to college. This doesn't mean we should forget what these professions actually require, especially since most who attempt them fail.
Why do you assume I haven't seen similar forms of spaghetti code? The first workplace skill I mastered was Lamaze breathing so I could avoid shouting expletives when looking over other people's projects. However, I'd be lying if I said these people were not well-credentialed. Some came from what are considered good schools and had good resumes, and make more money than just about anyone else.
Ordinary people are going to be writing more code. For most coding, what is required isn't a mystery. In fact, it's well known and well publicized, so that cut-paste-and-modify programming will continue to be the norm. If you haven't looked at the average web developer these days, you might take a peek, and you may see where programming is going. Mastery of libraries, frameworks and commonly needed syntactical devices has replaced the roll-your-own coder.
Which leads to the contractos I have to deal with. They have no idea how anything actually works, just the knowhow of which button to press when in some program. If anything breaks they are lost, firing up wireshark and watching packets on the wire is totally beyond them. They would not even know what to look for.
I see this all the time in business, sports, entertainment, investing, etc. Most people are willing to work for a tangible reward, but only a few are really ready to risk everything for huge success.
I'm not talking about lottery ticket buyers here, but people willing to take calculated risks in a productive way knowing that they might fail and will pick up the pieces and try again if it fails. Probably the best world has a stable base of workers from which true entrepreneurs can launch.
Peace is easy to achieve, just surrender. Liberty is much harder get/keep.
Beware anyone who calls your profession a "priesthood", because he operates under the assumption that he is entitled to more than you, is either jealous or contemptuous of your market salary and wants to put you in your place. For whatever reason our culture regards doctors, lawyers, stockbrokers, and CEOs as deserving the benefits of scarcity, but it is a huge problem when you can't you hire a computer nerd for less than six figures. If you aren't an extrovert, you don't deserve to be on top of the status hierarchy.
We already have vocational technology education, but it's widely regarded as a joke. Putting it in high school isn't going to change that. And if you have the knack for it, learning programming or learning computer maintenance is easy. After all, every time the subject of college degrees come up, there are always people very adamant that they didn't need one, and that "the best people I know didn't go to college". So if it is unnecessary, why are they arguing for "blue collar" programmers? These people argue "nature" in one breath and then "nurture" in the next. Dash is actually saying that the self-educated or non-degreed don't deserve to be considered "white collar" professionals.
Dash also makes the mistake of conflating programming with "IT", something the Slashdot peanut gallery is also apt to do. I'll leave that stupidity for a different flame war.
There's no shortage of tech workers, which is why you can't get college bound kids interested. Off shoring + H1B Visas has seen to that.
I'm pretty skeptical of this entire story. In my experience whenever anyone talks about retraining blue collar workers for tech work it's just a desperate attempt to deal with the fact that robots and outsourcing have made these people obsolete, and we want to pretend there's something for them all to do besides starve...
Hi! I make Firefox Plug-ins. Check 'em out @ https://addons.mozilla.org/en-US/firefox/addon/youtube-mp3-podcaster/
I actually regard the fact that someone could say this as a great example of why computer science education is broken. The reality is that there's a tremendous amount of REALLY BAD code out there, written by C.S. Majors and non-C.S. Majors alike. I'm minded of one case where a self-taught perl programmer in a company I worked for absolutely could not figure out why his code to convert a few megabytes of data was taking days to run. Turned out he was appending to a string in order to add a few bytes to it, and every time he did it perl was copying the string to a new location. Simply by "pre-allocating" the string we cut the run time down to a couple of hours. This would have been obvious to him if he'd ever coded in C, or taken a data structures class. But he hadn't. Things like data structures, algorithms, and most importantly security are hard. They can't be taught in a trade school, because people in trade schools lack the necessary background. In the case above, I tried to explain to the guy the whole concept of "big O", and quickly discovered that he didn't know what a factorial was, nor a logarithm, and was a bit sketchy on the concept of geometric expansion. Please don't dump more half-trained programmers on us. We don't need them, and those of us who do understand information theory (with or without degrees) will spend way too much time fixing their errors. I'm not saying everyone needs to be a CS major (my B.S. is in Philosophy, my masters is in Theology, and my Ph.D. is in New Testament.) I AM saying that there should be a requirement to learn some basic skill before you're allowed to write code for a living.
"He who would learn astronomy, and other recondite arts, let him go elsewhere. " -- John Calvin, commenting on Genesis 1
All developers, programmers, researchers - we're all blue collar. People working in administration and accounting are considered white collar.
As a scientist, I don't feel insulted to be "blue collar". I'm fine with that.
"The agriculture ministry is not in charge of Gundam" - Japanese ministry official.
Part of the reason I don't think an apprenticeship model works for teaching programming is that by its nature it is a scholarly profession. I don't mean that in the ivory tower way, I mean that programming is largely research based and requires an active mind. You need meta-skills of the kind that allow you to assess, filter and process a lot of information, but be able to focus in on and find the particular bits that are relevant to you. Doing an university degree often teaches this skill indirectly and some people develop it themselves though natural dedication (autodidacts). I don't think an apprenticeship style of learning gives people the time or inclination to do this. More practical experience and mentoring is definitely valuable, but it shouldn't be the sum total of a programming education.
I also think that there is also a defensive thinking mindset required to properly produce robust software that requires a certain level of formal knowledge as well as practical experience. Degrees at the moment don't necessarily teach this, but you do see a lot of software written without this knowledge and quite often it becomes obvious that it's only going to work *some* of the time and quite a lot of this software comes from people with a weak formal education (but not all of it).
Huh? Floats is the standard representation of numbers almost everywhere.
Not in financial transactions. While there are ways to do financial transactions with floating point numbers, they have an alarming tendency to introduce rounding errors. When you are dealing in money, rounding errors are an extremely bad thing because then the books don't balance anymore. One common way to deal with the problem of rounding floats is to treat the stuff to left of the decimal as an integer and the stuff to the right as another integer since there are no rounding issues with integers. While not as fast as floats, the extra accuracy is worth it in this instance. There are other ways to solve this problem but you'll find conventional floating point is used with great caution in the financial world.
There's a reason floats are implemented in hardware.
Which has nothing to do with why floating point numbers are often not used for financial transactions.
To build a house, you not only need the architect, but the guy who hammers nails and lays flooring. Similarly, to build a program, you don't necessarily need to know much about virtual void functions, but you'd better be able to handle integers, strings, arrays, if-then statements and loops. These are the hammers and nails portion of the industry.
Please do not read this sig. Thank you.
Actually scratch that, I guess parts of pennies can somehow exist. Never mind that they can't be paid.
Not only can they be paid, they often are. Remember that most currency is not actually coins and bills. Most of it is just numbers in ledger somewhere. Stock transactions are often to as many as 5-6 decimal places. My company quotes parts with prices containing 4 decimal places. When you are dealing with many thousands of parts those fractions of a penny can add up to real money pretty quickly.
If your design can be done by someone with the education levels or mental faculties of a welder, it can be done by outsourced talent more cheaply anyways.
Apparently you have never tried welding if you think welders are dumb. (hint, it's really quite difficult to do well and requires a LOT of training)
That said, there is a lot of coding that is not practical to outsource. I am not a programmer professionally but I do some coding here and there as a part of my job. I'm not about to write a linux kernel or anything like that, but some simple coding to do my job more effectively is useful. Should I have to go get a CS degree before writing a few macros or a batch file or a shell script? Are you seriously arguing that I should outsource my macros to India? Some programming simply isn't very hard and can be done effectively by someone who isn't a highly trained specialist.
There is a place for highly trained CS experts and that is working on the large scale and challenging problems. It really is a waste of everyone's time to have them working on simple programs that can be adequately by people with far less training.
That's all well and good until you find out they've been using floating point for currency calculations, and they can't figure out why their bubble sorts are so slow.
I've worked with programmers with associates degrees. Some bad; some good. I'm not entirely against them, but I would not want an entire team made up of them. They have huge blind spots that CS grads don't have.
You see that also with people with BS degrees, and I know about those (and a lot more) when I got my AA degree. Truth to be told, I knew more about programming and CS when I left community college than my sophomore/junior peers when I transferred to a 4-year university... and I met quite a few senior students and even grad students who couldn't picture an array of pointers to structures with function pointers as fields (not that you want to do that every day, but c'mon a senior CS student or grad student should have no problem visualizing that.)
I got a BS in CS, went to grad school and now I'm trying to go to grad school to switch into a more hardware oriented degree. I have 17+ years working on this, and I can say with great confidence that most "enterprise" programming tasks do not require a BS-level education in computer science.
More importantly, a good community college can provide, via a AS degree, all the tools needed to do work : systems analysis and design, structured and object-oriented programming, all that mixed with an intro to the basics of algorithm analysis (without the proving part), hands-on RDBMS, basic network/sysadmin skills and other fundamental skills like using/setting source control and bug tracking systems and technical writing.
You are right when you say you don't want to work with a group made solely of AA/AS graduates. I know; I started my career with a AA only, and I know for a fact that such a group needs more senior members to give technical direction.
But, for IT and the typical enterprise programming, we really do not need to know about the pumping lemma, prove the equivalence of turing machines to lambda calculus or the differences between micro kernel and monolitic kernels or proving some something on the structure of bizantine problems.
Blame it on the dot-com that we had a push for MOAR!!!(10+1)! 4-year degrees for web page design, which in turn converted most CS 4-year programs into Java/.NET vocational schools (where a person can graduate w/o even understanding what a pointer or a segfault is.)
The correct thing back then would have been to promote more community-college level vocational education as 2-3 year AS/AAS degrees. It would have been the best for the career, the nation and for all the students involved.
I love CS, I love my degree, I love my grad education, and God willing, I will get my Ph.D, and I love my line of work. But hell that I will ever propose that a BS degree is the minimum required to work on IT/enterprise programming.
I pray to ${DEITY} that this will become a firm step in the right direction.
From the post:
That's a degree in the liberal arts, unless he chose a deliberately awkward "liberal arts college" + degree formulation.
When we graduated college, an old-timer said something to the effect of, "Now that your degree program is over, your education can begin."
What followed for the lucky amongst us was finding people in our industries who could teach us from the benefit of experience. Education tries for comprehensive and lacks in application; an apprenticeship teaches application.
Both are necessary, but one can be had by cracking a book on your own time (use the Abe Lincoln method, just make sure you do an hour a day) and the other -- experience/apprenticeship -- cannot.
Unfortunately, it seems like many degree programs are going in that direction as well.
Traditionally, blue collar work has included artisans and craftsmen, and as I recall that's where the apprenticeship method started.
I think this is insightful because "autonomous decision-making" is a good dividing line. However, most blue collar work of the type I've mentioned occurs by independent contractors or people with a fair amount of autonomous decision-making, such as installing hardware or planning construction. I don't think "blue collar" should be assumed to mean "because they sweat, they're dumb," which is an assumption that our television shows seem to make.
This is a good point.
Coding is, in my view, one tool in the belt of a CS grad. The biggest skill is how to apply technology, and that's where critical thinking and analytical skills are essential. Sometimes, coding is the answer; not always.
Often times, the architecture is in integrating multiple systems to work together, and multiple tools are used, including but not limited to coding.
The roll-your-own days are mostly gone. While I'm nostalgic for some aspects of them, we need to acknowledge that today's coder may be stitching together complex chains of software, hardware, operating systems, network, libraries, scripts, shells, etc. in order to make a project as a whole work, and that's where architecture (a career) is more important than programming (a tool, a craft).
When I grew up in the 1980s, computer jobs were treated as some sort of blue-collar skill suited for autistic personality types that were incapable of relating to other human beings. "Respectable" people were supposed to go into law, medicine, or business. Before resumes became computer-searchable, "respectable" people avoided mentioning computer skills, since employers were turned off by technical jargon.
If you pretty much just sit at a desk or talk, you are white collar. If you are vigorously using your arms or legs in a factory, etc. you are blue collar. Coding is always white collar by this definition.
This is perhaps one of the most insightful articles I have ever read. I guess it also highlights my beef with Computer Science curriculum at the University level: it doesn't teach real world coding but coding to solve interesting theoretical or mathematical problems. It doesn't take a solid foundation in mathematics to be able to learn to code. I think learning to code much in the same way as one learns to be a machinist is a fabulous idea and making computer programming a blue collar, skilled job is long overdue. If such an option were open to me, I would be all over it in a heart beat. I have a degree in Criminal Justice yet I'm working as a Systems Admin and I don't particularly like it. I would love to be able to go to a vocational training program with apprenticeship and write software. This is so much better than importing H1B visas to do the work because it encourages development in America.
What he really means, in a nutshell: "Programmers are paid too much."
I am officially gone from
Take a look at the kind of code that you see out of graduate students before you assume that degrees have any meaning at all. I am talking about people who receive PhDs in computer science, but who cannot get beyond the "one big loop with one bit switch statement" organization of programs. This includes grad students who work on "systems" rather than "theory."
Palm trees and 8
The better answer is to use languages with arbitrary precision representations of rational numbers. You will not have to deal with integer overflows, you will not have to deal with losing precision, and you can spend more of your time developing the correct program logic. Yes, it will mean a bit more in resources -- which can be fixed later if it becomes a problem.
There's a reason floats are implemented in hardware.
Yeah, and it is the same reason we continue to use C and C++ to write high level programs: history. If we were starting from scratch today, using the latest technologies and research, it is almost certain that we would do things differently.
Palm trees and 8
The word "computer" before WWII basically meant a clerk computing insurance or ballistic tables at desk with an adding machine and/or pencil. These clerks were almost always female, while their supervisors or officers were men. As the adding machines evolved into vacuum tube behemoths, the female clerks ofter did the wiring, switch settings, punch card or punch tape preparation, and even the coding. So coding developed a "taint" as being female, clerical and not quite white collar.
One consequence was that it was taught first in trade and secretarial schools. I remember faculty debates at MIT in the 1970s whether computers should become an academic department. Some faculty considered it a mundane skill like typing and not worthy of department status. But it kind of snuck into lots of other departments where EE, business, civil engineering and math were teaching courses about computers. It finally achieved department status in 1980, joined with Electrical Engineering.
In some of my first jobs in industry in the 1970s , the programmer was an assistant to the scientist and engineer. Either the programmer wrote everything with their guidance, or the scientist submitted coding sheets to the programmer to be punched, submitted and debugged. I was a novelty as a scientist who did my own typing. The old guard viewed me as either a genius or loser for doing this. Eventually as computer terminals and workstations grew inexpensive and clerical labor more expensive, many scientists and engineers did coding themselves.
But by that stage, you may as well use floating point or fixed point binary. Fixed point decimal is no better at representing fractions than fixed point binary. Nothing wil help if you need 1/3 of a penny.
Better programming languages will help you:
Oh, look, an arbitrary precision rational number, created where we expected to see an arbitrary precision rational number. Yes, you can get a float, but you need to be explicit about wanting that because of all the problems it introduces:
Yes, you will see some performance hit when you use arbitrary precision representations, although Common Lisp (and other languages) will let you give the compiler "hints" about how things can be optimized. Further, notice that the value "1" was assigned the type "fixnum" automatically -- meaning that if it were used in integer arithmetic with other fixnums, it would only become a less efficient representation if the compiler could not guarantee that the result would be in-range. Example (note that a fixnum on my system is 29 bits, and 2^29 - 1 = 536870911):
* (let ((x 1)) (describe (+ x (coerce (parse-integer (read-line)) 'fixnum)))) 536870911 536870912 [bignum]
So really, you could say that we have a third choice, but that we keep ignoring it because we are afraid of the performance penalty (somehow, we seem to be less afraid of the "you could wind up with a number that is an order of magnitude wrong" penalty).
Palm trees and 8
So very sorry but I must take exception with this. The "substantial amount of math" comes down to the 4 basic operations. Even partial differential equations come down to it with lots of looping. Really good programmers are not mathematicians for the most part. Really good programmers understand the machine and mathematicians dream up equations that do "something" and then explain in terms that can be translated into code.
No reason to apologize, without exceptions we wouldn't have any conversations, discussions or debates. I find it incredibly interesting that you seem to consider some parts of programming to be mathematics and you can even go so far as to say that "really good programmers are not mathematicians for the most part." I will quote Donald Knuth since he is much wiser than I:
Therefore the idea of passing laws that say some kinds of algorithms belong to mathematics and some do not strikes me as absurd as the 19th century attempts of the Indiana legislature to pass a law that the ratio of a circle's circumference to its diameter is exactly 3, not approximately 3.1416. It's like the medieval church ruling that the sun revolves about the earth. Man-made laws can be significantly helpful but not when they contradict fundamental truths.
Understanding the machine is very important as well but any programmer should know mathematics first and foremost. I use logic daily in writing boolean expressions in any language I use and on top of that, De Morgan's Law has saved me countless of hours of rederiving truth tables. Furthermore the knowledge of when to use a hash map versus any other collection and the run time of my code is so deeply seated in mathematics that I would find myself writing code that works very easily in my unit tests but might take days or weeks to run on real world data. Your assertion that mathematics in computing ends at the "four basic operations" is laughable.
And as to the bit about functional -v- object oriented languages, your tipping your "coding snobbery" hand a bit
"Coding snobbery"? How is it when you collect all the tools out there that are available (most free of charge) you're suddenly exhibiting code snobbery?! I'm not telling you to always use it, I'm not saying it's the silver bullet. I'm just saying that in some cases it makes sense to use it!
and indicating you are the kind of person who just wants to play with the newest toys.
I am absolutely floored by this mentality. There is no silver bullet in software development.
All the languages out there are mostly based on C and no one has yet been able to come up with anything that is actually better, but is rather simply a derivative. Yes syntactic sugar abounds but strip that away and you have C.
Surely you're not suggesting that one language is just "better" than any other language at everything. Could you explain to me how it is that the family of Lisp languages that began appearing around 1958 are "syntactic sugar" on top of C that was written between 1969 and 1973? Are you telling me that Lisp, Scheme, Haskell, etc are all just variants of C with syntactic sugar?! And Prolog's development in 1972 was based on C as well?
Functional languages are almost pure syntactical sugar as the underlying code that is generated is still the basic loop and branch that applies to all languages regardless of their style and name.
It turns out there are very inte
My work here is dung.
I have been coding MIS (mgt. info. systems) since 1994 professionally (AAS CSC satisfied, & 90/120 credit hours into the B.S. for CSC, chipping away @ it over time & as finances permit, of course, as well).
Before that though, I got my B.S. Business Administration (with MIS concentration/minor), which has HELPED TREMENDOUSLY as far as conceptual business understanding for business-process flows during programmatic development for automating said processes!
(Which the business background helped in, since the degree touches into the midrange levels of other business-oriented majors such as accounting, finance, marketing, & more of "hard science nature" such as principles like "shortest route" for logistics etc./et al).
* In other words, because of that added background, I've never really had an "issue" with the concepts, & grasped them quickly (it was only SPECIFICS of the BUSINESS PROCESS + it's data that needed more detailed studies while on the job) - THAT part, is never EXACTLY THE SAME as the next company has it (hence, the prevalence of jobs in MIS/IS/IT 'data-processing' type work out there... there's always more reports & systems to be made!)
APK
P.S.=>
"People from the "floor" have a totally different insight than management and CS graduates and their insight leads to much more efficient ways of doing things." - by Dcnjoe60 (682885) on Monday October 08, @08:55AM (#41583867)
BINGO - & once, in a shop full of programmers I was working with at a large insurance concern, they called their users "dumb" & I was like:
---
"WTF? They know the BUSINESS PROCESS far, Far, FAR BETTER than you fools do PLUS they are what keeps YOU, "in business" here! They're the experts, we merely automate things for them..."
---
Those "stupid users" are the BEST REFERENCE since they use the process & data, daily, + understand what it does, for whom OR what, & how to get to it and lastly, what the desired results are, OR should be...
Once, during such a project (VB.NET & ASP.NET designed)?
Well - I "broke the holy of holies" there:
I directly consulted a user (main user of a multi-user app) who was "the expert" in that area (claims) on what the program does & should do for her + her colleagues in her department!
SO, thus, I designed it EXACTLY per her 'use-case specs' & she loved it (so did her peers)... She came into a morning meeting WE had in the IS/IT/MIS dept., & thanked me publicly for it.
No other programmers ever got that there, & small wonder THAT, due to their "superiority-complex attitude"...
This is WHY you see things like "the perfect programmer has 'business-saavy'/background in trade articles for business & coding...
... apk
If you know mostly what you'd like to to, have a chosen path to get there, and time and $$$ to do it this model would probably work very well.
... not know how to do stuff. Assumptions and business requirements change, often daily. Developers need to communicate with businesses, persuade them to make good decisions (why I like developers with Arts and Sciences backgrounds). My guess is we'd get a lot more meaningless (not well thought out) stuff done which would buy us squat.
The problem is, I have NEVER seen that in my 15 years of developing. The technology landscape is constantly evolving, we need developers that know how to learn to do stuff
I don't want an army of semi-functional programmers, I want a FEW real developers.
I am in the beginning stages of teaching a lifelong MS developer and fanboy our Big Data environment. The poor guy basically needs to learn Nix, bash, sed/awk, SSH, cron, Ruby, MYSQL, EC2/S3 and Rails BEFORE we start talking about HDFS, Hive and Mahout. The ONLY thing I have going for me is his background in CS.
This kind of misunderstanding isn't what is causing the major pains in the industry.
Changing the educational emphasis won't address the major pains.
The major pains are caused by:
1) The perception that one cannot build a career on software development, because agism forces people to change to a completely different career sometime after they turn 35. True or not, this scares people away from the field, as it should, because if it is true then anyone talented/intelligent enough to do software development is talented/intelligent enough to do something else instead.
2) The perception that software development pays less than other fields that require comparable talent/intellegence. If true, it makes perfect sense that people who know they have what it takes would turn their noses up at a low-paying waste of their talents.
3) The perception that one is perpetually at risk for having their job outsourced to cheap foreign labor. Nobody likes working jobs where they don't know if they will still be employed the next day (and the deciding factor isn't even dependent on their performance).
4) The perception that developers are expected to overwork, sacrificing their personal lives for a company that won't even pay them overtime wages for it. Work-life balance is important, and people will shy away from careers that deprive them of it.
Address these perceptions, and address the issues that cause these perceptions, and you will see people naturally choosing to do software development again.
Refuse, and employers will face a lackluster market populated mostly by people with social/professional problems (or timezone, native language, and cultural acclimation problems).
Okay, so a bit stereotypical and masculine which...may be behind some of the programmer/CS image problems.
But... I am a professional programmer. I have an undergrad degree in CS, languages & systems. I am mostly finished with a post-graduate degree.
I have over a decade of professional experience, and have done my trials at the helpdesk and learned how to speak with my users. Sometimes.
I have a toolchain, a product suite, paradigms, vocabulary, and experience with a bunch of different platforms...
An apprenticeship might not be a bad idea -- it would have more quickly taught me a lot of techniques I had to learn on my own. But any decent software shop could have done that too.
But you still need smart coders.
I am not a geologist, an engineer, an anthropologist, or a phycisist -- but I have written software for all of these and more. Sometimes, it took them weeks to get me up to speed. Maybe three years before I totally understood in one case.
But... the people in these disciplines who programmed -- almost uniformly were /not/ programmers.
They not only fought the computer, but they did not structure or decompose their software. They didn't break it down into reusable modules save by copy-paste.
Most of them do not understand error handling beyond naively.
I'm still working with a climate change researcher whose primary software is structured like...
try {
for (i : modelLoop) {
ErrorProneSubRoutine()
}
} except {
print 'finished routine'
{
They NEVER know when or why their output data is often substantially wrong. And just start flipping data around until it works.
Worse still, they're in a hurry, frustrated, short, and get angry when asking for help -- "Just tell me what to do so it compiles and runs".
So yeah... people should be taught code. People like this are a dangerous menace to society and research.
This is not just an academicissue... it's an issue with startups and small companies that have single founders who learned PHP, ASP, or JSP... among other things.
It's an issue with large companies that have trained people, but not taken the copiuous and expensive time to /really/ train them and give them mentorship and guidance to repair, refactor, and fix their old software.
Do you know object oriented programming? Great...
Do you know how to make something something 'private' in assembly, in javascript? No? Then you don't really know your language...
Do you know how to fake polymorphism in a language that doesn't support it? How to write a lexxer for a friendly power user scripting language? The difference between overriding and overloading? What static analysis and coverage tools are for?
Do you know when to use a good IDE, and what the possible pitfalls might be?
What's the difference between a static class member in a java generic and a C++ template? Better yet -- why does this difference exist?
Do you have an opinion on when to use macros vs const?
How about multiple inheritance? Oh yeah... I can't do that in Java. What's the workaround? Why doesn't Java or Ruby let me? How does this influence the philosophy of working with best practices in that language vs python?
See... even decent programmers I know couldn't answer all of these, but a professional /will/ understand the concepts and be able to learn them if they're at least explained.
Someone without any CS education... just won't.
And that's before we get into asymptotic analysis, understanding how to do database joins and normal form, and getting into network protocols and debugging them, or structuring them for ... high performance efficiency.
You do understand that at a certain point just adding a single byte or two can make your whole connection about 25% slow
Sometimes businesses have great ideas that they need coded but can't afford expensive developers.
They need the cheap blue collar coders to just get it done and working.
Once they get it working the business starts making money and expanding beyond the original programs ability. That is when they bring in the expensive developers that can program it the right way so that it can be secure and handle everything the business throws at it.
We need both kinds of developers. The cheap ones help create jobs for the expensive ones.
The Official Site of 1337 Pwnage
Thanks for pointing that out, because roman_mir is Foe number 1 on my list. Doesn't surprise me though, for hundreds of years of Conservatism, it has always produced the exact opposite effect of what it claims to solve.
Maybe. But if you're going to go with blue-collar coding, you'll need to stop with the uber-coolification of programming.
I'm talking about stuff like the obsession with adding functional programming to Java. Java's a perfectly good language for the blue-collar programmer. It lets you check and find a lot of your bugs at compile time. The static nature of the language lets your IDE give you Intellisense-type (code completion) features, very handy for the blue-collar programmer.
A very General Motors factory line type of language. You basically know what's happening, where something is coming from.
Now add functional programming to the mix. Suddenly your blue-collar programmer is wondering, "Where did $BLAH come from?"
So there's a tension between having an environment that's geared for production-line code creation and "coolness" (trying to be like Ruby) on the other hand.
I'm not a lawyer, but I play one on the Internet. Blog
On education and "complex skills" http://www.abelard.org/asimov.php
Not just coders that need apprenticeshipes. IT Techs needs them as well even more so as CS does not tech the skilled needed to do IT tech work it's more for teaching coders
We're already there. Most sysadmins are effectively blue-collar workers. So are most PHP and web coders. Wages continue to decline.
It might work out better with formal apprenticeships and unions.
Unlike the Senior Programmers, who were never Junior.
http://soylentnews.org/~tibman
Which programming class taught you packet inspection?
http://soylentnews.org/~tibman
None, that was not what I said.
I merely stated that those kinds of degree mills lead to uneducated workers who are useless if anything outside the ordinary occurs.
I actually did do packet inspection at a university for a class. It included 100+ pages of reports that I wrote detailing how protocols actually worked vs what the documentation various vendors and what the RFC said. The typical assignment took about 10-20 hours in the lab or at home doing the same thing and probably nearly that long to write the reports. That level of work is not going to be done at a diploma mill or community college or tech school.
when I took a chemistry course and had sig figs explained to me. (Weird that's where I learned it but it's true.)
Did you know 80 to 90% of the moderators on slashdot wouldn't recognize a troll even if one dragged them under a bridge.
Perhaps some exceptions among the liberal arts.
Classical education was about exploring our universe. From the internal (psychology, medicine etc), the external (sociology, physics, astronomy, languages etc). The Gods offered ways of projecting the essence of human nature in stereotypical form suitable for discussion and analysis. The educated person could exchange original thoughts about any discipline.
Today every college major is a job training routine. Nobody is interested in education, everyone wants a job. If you can say of yourself "I am a ..." doctor, lawyer, machinist, programmer, teacher, football player - then you are blue collar. If you have a title then you are not educated.
Education in its most recent European incarnation (Renaissance) was designed for gentlemen and to some extent for gentlewomen. People who needed the knowledge to communicate with gentlepeople from other lands about politics, business, war, economics, trends, etc. People who were expected to represent their respected families and countries. People who would set an example for others less educated. It was unthinkable that an educated person would not know several languages, that a well bred woman would not be able to play piano, that a child might not be equipped to spew the most elegant insults to his mates.
America received a bit of that attitude about education in the person of Benjamin Franklin and a few others, but generally declined into a morass of religious superstition which continues today.
I was an English major. I was beset with inquiries about my planning to be a teacher (the only occupation open to English majors). I tried to explain that I was merely interested in language and creative writing. This explanation was incomprehensible to other students.
Despite my classical education (some sciences, philosophy, arts, programming, electronics and quite a lot of business courses), I am still blue collar. Nobody will hire me for what I am capable of. They only see a useless degree.
However hungry I may become, I have immense satisfaction in my broad perspective. I feel that I have a fuller sense of my environment, of the past and future, of human nature, of the essence of math, logic and physics. Could be my imagination but my life is a process of growing, expanding in every direction.
It seems there are two ways of observing our environment. With our eyes, we see straight ahead. We focus, perhaps on programming, and to the extent that we focus, we eliminate all else. Most Nobel winners are highly focused. The other way of observing is as we do with our ears. All sounds, from all directions come to us. To the extent that we can hear and absorb, we admit a wide spectrum of understanding. Da Vinci consumed a wide spectrum. Some balance of these two is probably ideal.
...omphaloskepsis often...
In Chenna, India, till about 2009 (when I worked there) we used to recruit only form the "diploma" schools which In India are quite common AND AMONG THINGS TEACH LIKE HVAC, AUTOMOBILE ENGINEERING, ELECTRONICS etc These were usually full two years after high school. We used to use this diploma school for recruiting people after an aptitude test consisting of : numerical and spatial reasoning tests - like IQ tests and real fundamental questions in the OS of their choice. We found - Didn't have to teach them the real basics like whats a DBMS, file system. - Used to working in teams as part of their assignments. After the orientation and training, they would immediately enrol for higher studies in evening and week end colleges and thus we had lesser employee attrition since they would be more likely to stay till they got their college degree. I highly recommend this method. But FIND A GOOD SCHOOL WITH A KNOWN TRADITION OF GOOD EDUCATION AND VALUES. OK