There are lots of stats out there about how seriously computer science (CS) education is lacking in the United States (and I suspect many other places). Issues range from high schools not offering computer science classes at all to CS classes not counting toward graduation requirements. There are exceptions, however, and I wanted to highlight a very impressive project from a CS class at Chicago’s Lane Tech College Prep High School taught by Jeff Solin. Jeff had his students create a 3D representation of the Chicago flag. Check out his description and many pictures of the finished project. There is so much creativity in that project! So neat and so impressive.
{ 41 comments }
some lurker 06.24.17 at 3:32 pm
I wonder where these are, these schools that offer classes that don’t count toward graduation requirements (seriously, who would sign up for that? Does any high school student actually want to delay their graduation or take a class that doesn’t count? Whatever happened to “will this be on the test?”). I’m not convinced that “coding” classes are of any great benefit or that they are universally beneficial. Not everyone can write good code anymore than they can write good music or poetry or even coherent prose.
As for the career/employment possibilities, we used to offer carpentry and auto mechanics as credit course work. Where I live, all the high schools of a certain vintage were built with those facilities. We still make houses out of wood and we still have cars but we don’t offer that course work.
I get the idea that “coding” teaches problem solving but so does mathematics. Even simple arithmetic has strategies that need to be mastered. If we want to add a vocational tech component back into schools, let’s do that but let’s open it up to the trades as well. You never know, some of the people who think everything can be done with software might learn that water doesn’t flow up hill, no matter how you code it, or that a 2×4 isn’t. I work in a new modern high tech building and we wonder why the heat only worked on warm days. Then someone told us it was controlled by software and we understood.
Joseph Brenner 06.24.17 at 7:46 pm
(1) Being able to code probably is, or could be, generally useful to a wide range of disciplines– e.g. think about stuff like Excel spreadsheets. That isn’t to say it necessarily should be a requirement for everything, but it probably does makes as much sense to teach people basic programming as say, geometry.
(2) Documenting how many “Computer Science” classes there are is fairly easy compared to evaluating how necessary and useful they are. CS geeks like to think that they own the subject, but it isn’t clear to me that they really have a lock on it, and if Computer Science was really a Science they’d conduct some studies of things like this: what do programmer’s really need to know, what kind of tools are really useful, etc.
Eszter Hargittai 06.24.17 at 8:24 pm
If you read the linked-to pages, you’ll see that one important argument for more such education is the number of jobs being created that require such skills.
peterv 06.24.17 at 10:17 pm
Programming requires a form of thinking which is rigorous, disciplined and abstract, similar to but not identical with the forms of thinking required for doing mathematics. It is true, as with other forms of thinking such as verbal and musical thinking, that not everyone has a natural ability for such thinking, or is able to acquire the ability. But eveyone should be exposed to it, not least because those who have or who acquire an ability to do it, can have their lives enriched by being able to do it. Thousands, perhaps even millions, of people who don’t think in the verbal mode which has dominated our cultural life in the West these last 200 or so years, now have the opportunity to think in a mode they are more comfortable doing. This, rather than any narrow, instrumental argument about jobs, justifies the teaching of programming to all children, just as all children should learn to read and write poetry and prose, to reason mathematically, to play music, and to do art.
JimV 06.24.17 at 11:00 pm
The computer does exactly what you tell it to do; the instructions are completely defined; and yet people write faulty code that needs to be tested and debugged. There are some great lessons to be learned from this: don’t assume your understanding, logic, and reasoning are always correct and complete; always check and test your work; and if you keep trying, and don’t give up, you can have the satisfaction of getting something complicated to work.
The same process is the basic method of accomplishing anything, but running a computer program gives an immediate feedback which makes programming the best way of learning these lessons, I think. The sooner it is introduced (in simple forms) in early grades the better, I also believe.
Guy Harris 06.25.17 at 12:08 am
JimV:
And sometimes the faulty code might not be your code; your code might be using somebody else’s code to perform some action, but that other code might not be correctly performing that action.
And:
that may also apply to a number of “anythings” – if, for example, you’re relying on somebody else’s research to support a conclusion, and that research turns out to be bogus….
JimV 06.25.17 at 2:06 am
Guy Harris: to clarify, I was writing from the point of view of a grade-school or high-school student learning to code stand-alone algorithms, to describe the pedagogical benefits of such experiences. If your point is that at some point the complexities of a large system of interacting programs (or other interactive design or research work) become so great that a single person cannot comprehend them, I agree, but don’t think this is germane to the issue of whether programming should be taught in USA schools.
Moz of Yarramulla 06.25.17 at 7:20 am
I’m re-reading Facts and Fallacies of Software Engineering” at the moment and your post reminds me that not everyone who programs or spends time writing software thinks of what they’re doing as programming. Spreadsheets are the cliche example (also notorious for being untested and unreliable), but there are also people who play with Matlab or R, Python, WordPress etc.
Teaching people even just a little of the basic skills to make their programs better seems like an excellent idea. But then, so is teaching the rudiments of double entry book-keeping (and for the same reason, you can feed accurate data into your financial calculations, but if the rows and columns don’t give the same result you’ve at least got an idea that there might be a problem. Not everyone is so lucky).
Moz of Yarramulla 06.25.17 at 7:31 am
I wonder if this could be taught as an extension/part of something interesting and fun, like robotics or science?
I know that getting an official widget approved would take decades and cost billions, but an arduino or pi is pretty cheap and has enough sensors built in to be interesting. Adding even a temperature sensor can teach kids about the difference between having a measurement and knowing the actual value (“a man with one watch knows the time, the man with two is never sure“).
Arduino is very simple but you have to program it in C. You can talk to the result in Python or R or whatever, but you can’t really program the board that way. Using a PyMite or a Raspberry Pi gives you more powerful machine with better languages for learning in. C is great for people who already understand that programming is useful and want to do something that only C can really do, but as an intro to programming it’s not great.
The obvious step if money is not a problem is Lego Mindstorms, which via EV3Dev can use a variety of languages.
Dipper 06.25.17 at 9:19 am
I love a good bit of code just as much as the next person, but for those looking to build an advanced economy on coding skills I’d just point out that international rates for coders are quite low, see e.g. http://www.bbc.co.uk/news/world-asia-23497561 . And I had a former colleague who ran internet businesses out of Vietnam at much cheaper coding rates.
peterv 06.25.17 at 10:19 am
JimV:
Your statement also may not apply to multi-threaded programs – eg, single programs written by a single programmer to run on a single machine but having multiple interacting threads of control. These are well within the capabilities of high school programmers, yet the resulting programmes may exhibit inconsistency of observable behaviour, and hence defy predictability or explanation. Such programmes are one reason why the formal study of concurrency is so important in computer science, and yet still so little understood.
Lee A. Arnold 06.25.17 at 11:46 am
We need a general overview textbook for the teenage humanities student.
It must start from what Boolean algebra is, and why we would want to use it. Then go through a conceptualization of the electrical instantiation in logic gates. Why memory is required for the idea of a computer computation, and how memory is engineered. Then put together the other basic necessities especially the clock, the output interface, etc. The conceptual engineering of the whole thing.
This textbook should proceed step-by-step at least as far as describing in the simplest terms the conceptual intention behind AI. Something like: instead of writing an Algorithm for the Data in order to output an Answer, AI is given the Answer and the Data, and it must write its own way to produce that given answer. Then, an overview of the basic AI techniques used to get there, (e.g. inverse deduction, back propagation, support vector, etc.), at the simplest level of how these are engaged with the data, and what they do.
Each chapter would end with: 1. the present state of achievement in that chapter’s topic, whether it is about math, or computer architecture & engineering, or scientific applications, or business implementations, or artistic creations. And, 2. what you need to learn further, in order to pursue this particular topical avenue, out of creative interest or for a career in science, engineering, business, art.
Sort of a combination of Petzold’s “Code” + Nisan & Shocken’s “Elements of Computing Systems” + Domingos’ “Master Algorithm”. + some texts that do not exist yet.
We do not have a single unified presentation of the entire realm of engineered thought, its basic conceptual tools, that gives a way for young students (or their elders and their teachers) to dream about the future.
This might be instituted as a contributed wiki sort of thing, but it needs to be edited as a continuous text. I find nothing out there right now that does it soup to nuts (and bolts). I find no good synthesis. We are falling far far behind in the preparation of all humans for reality.
JimV 06.25.17 at 4:00 pm
PeterV, I remain at a loss as to what you and Guy Harris are complaining about in my comment. Again, it referred to the pedagogical experience of a beginning programming student, and this experience should not involve unpredictable and unexplainable results, unless it is poorly taught. Both replies seemed non-sequiturs to me, which could well be my fault, of course.
The pedagogical lesson of this experience seems to be that I should not expect any charitable readings of my comments at Crooked Timber and should stop commenting. Very well.
Guy Harris 06.25.17 at 5:40 pm
JimV>:
It isn’t. It’s that checking your work is necessary but isn’t necessarily sufficient – if your work depends on others, errors in their work may be a problem – and that this is another lesson that applies in a number of endeavors and that people need to learn. (Hence my “if, for example, you’re relying on somebody else’s research to support a conclusion, and that research turns out to be bogus….” comment.)
Perhaps teaching programming isn’t the right way to teach that particular lesson, but it’s still a useful lesson.
Kiwanda 06.25.17 at 7:28 pm
While the described project sounds fun, I have to push back a bit against the implicit attitude of the OP that “Hey, now that this computer science class involves a free-form visual arts element, it’s getting *creative*”, or the comment above by Moz of Yarramulla, “I wonder if this could be taught as an extension/part of something interesting and fun”. Solving problems, including in computer science, is often creative and fun, and the harder the problem, the more creative and the more satisfying (if not the more “fun”).
There should be lots of different ways tried to engage students, including free-form visual arts elements, sure. But ideally part of learning about computer science should involve developing an appreciation for the aspects that are creative and beautiful, *in themselves*, not as means to some other goal. Figuring out how to apply recursion to a problem can be creative, and the result beautiful. Figuring out how to solve a problem iteratively, where the most natural immediate solution is recursive, can be creative, and the result beautiful. Writing code in the cleanest possible way can be creative, and the result beautiful. Understanding the beauty of the relation between recursion and iteration, and what it means to write clean, beautiful code, should be part of what is learned.
Moz of Yarramulla 06.25.17 at 10:06 pm
peterv@11: why the formal study of concurrency is so important in computer science, and yet still so little understood.
Which has always seemed weird to me, as the exact same topic is considered basic and well-understood by electrical engineers.
When you think about it, a modern CPU has billions of individual transistors all working independently yet linked together, and combined they form somewhere between 4 and 4000 independent “processors”. If the electrical engineers were not all over that whole concurrency bizzo a modern CPU just would not work at all. I have found tools like timing diagrams very handy when explaining (software) locking patterns to software kiddies. You can actually design many problems out of your program. Ahem.
Moz of Yarramulla 06.25.17 at 11:39 pm
Kiwanda@15 Writing code in the cleanest possible way can be creative, and the result beautiful.
I fear you’re into the 1% of the 1% there, though.
By “done as part of something fun” I was meaning that for most kids something like “build a monster out of Lego” is fun and interesting in a way that writing just isn’t. I’m possibly biased by knowing too many teachers and more than a few homeschool/unschool families, but a lot of kids have been trained to regard writing as hard and distinctly not fun. So part of the teachers job is to find ways to engage students… except in ‘teach to the test’ countries like the US, where the main aim is to split the school-to-prison kids from the school-to-slavery kids. Ahem. I work (play?) a bit with older high school kids doing extra-cirricular stuff, and it’s always interesting to see them realise that what we’re doing is applying schoolwork to something they care about. Even the basic stuff like the “hands not head” kids discovering that milling machines work better if you calculate cutting speeds and use the right one for the job… some of them suddenly become really enthusiastic remedial maths students. On the one hand I want to cry because a 17 year old should not be learning for the first time that multiplication and division are useful, but on the other better late than never. I hear of similar things with university students, FWIW.
Moz of Yarramulla 06.25.17 at 11:42 pm
Also Glass in the book I linked above has a wee rant about the way almost no courses involve reading code, they start from the premise that students should make all the mistakes themselves. At least when teaching English kids are shown examples of good writing in various styles, before being encouraged to have a go themselves. The same applies almost universally, with coding being a notable exception. Why?
Anarcissie 06.26.17 at 3:29 am
As a person who programmed computers for fifty years (and still do) and made a lot of money from it, I’d say the most successful practitioners of this craft — people who turn out effective work, not theory-spinners or politicians — are people who have a kind of mental defect that causes them to habitually break down any kind of thought or experience into very tiny pieces — mental processes which are hidden by superior integration in more normal minds. Then, of course, they have to be able to put the tiny pieces together again into some semblance of desired machine behavior. But there is no immediately obvious connection between ‘print a list of names and addresses on sticky tags’ to ‘ld 14,ln3[x2]’ to the resultant printer in operation.
I don’t see much point in inducing this sort of thinking in young people (if that can even be done). It’s not news even to high-school students that big things are often made up of little things that don’t look much like the big things. In any case, programming, in the sense of planning and writing code that will make certain kinds of machinery do things, is progressively being automated. The stuff it deals with is already electronic and digitized which puts it ahead of automated cars and vacuum cleaners. It’s already in the realm. Coding can be amusing for those who have a ‘talent’ for it (see above), but it’s not necessarily going to provide anyone with a job. Producing millions of programmers is like producing millions of machinists or millions of mathematicians. What are they going to work on, and who is going to pay them?
peterv 06.26.17 at 6:23 am
@ JimV @13
“PeterV, I remain at a loss as to what you and Guy Harris are complaining about in my comment. Again, it referred to the pedagogical experience of a beginning programming student, and this experience should not involve unpredictable and unexplainable results, unless it is poorly taught.”
“Should not” perhaps, but does, even when well-taught, when teaching object-oriented programmimg, which is the prevailing programming paradigm. This is because such programming enables multi-threaded programs and these can defy predictability. I am not complaining about your comment, but just pointing out that the world of teaching intro programmimg is more complicated than is evident from your comment.
peterv 06.26.17 at 6:30 am
Moz of Yarralumla:
IME, whenever one discipline thinks a problem is simple or solved which another discipline thinks is difficult, it is because the first discipline is making assumptions that do not apply in the case of the second discipline. Economists assume, for instance, that all agents behave rationally (with s special definition of that word) while computer scientists cannot assume this about multi-agent systems, since code may always have bugs.
Chris "merian" W. 06.26.17 at 7:20 am
I recommend Jane Margolis’s book “Stuck in the Shallow End” about how high school computer science education can be deficient even in the presence of the material resources and equipment. The book’s about racial disparities, mostly, and beyond this focus I remember a lot of insightful case studies that exemplify failure modes of education. (To name a few: classes that focus on using pieces of software; highly scripted task-focussed courses that lack any problem solving component; teacher education gaps; etc. etc.)
Computer science education looks to me just about barely settled in undergraduate education, and pretty much in flux still at earlier stages. Even the most formalized curricula in the US are being debated. Doesn’t the AP class mostly teach the poor kids a whole bunch of Java?
Several disciplines have the potential to teach problem solving, or the analysis of a problem under formal constraints, or whatever intellectual merit you’d like to pick. From this doesn’t follow that it is sufficient to offer ONE such discipline at the secondary schooling level: different students are reachable by different offers at a given point in their development. (I think it is safe to say that the number of high school students who learn problem solving from their mathematics classes is very small.) The project in the OP looks absolutely lovely from the little I’ve seen, in this sense. It teaches the student computer science (and a whole bunch of related topics) in the same way as participating in a demanding theatre production increases students’ learning in English, or being part of some local archaeology project (with digging and exhibit) may open minds towards history.
(And for those who grumble about trades and stuff, I’m all for sending (younger) students into the school garden — I’m pretty sure that problem solving and maths skills and confidence take leaps ahead. Similarly for needlework/fiber arts, woodworking, design, or cooking…)
Niall McAuley 06.26.17 at 12:20 pm
Lee at #12 says: We need a general overview textbook for the teenage humanities student. It must start from what Boolean algebra is, and why we would want to use it. Then go through a conceptualization of the electrical instantiation in logic gates.
This is how courses for Computer Scientists are usually constructed, from the bottom up. If I was writing a course for a humanities class I’d start from something they know (say, Angry Birds or an Airline booking site on a phone) and work down.
Robert 06.26.17 at 12:53 pm
Has anybody read Jason Wilkes’ Burn Math Class: And Reinvent Mathematics for Yourself? I like the idea behind it, but think it may be a little too tied to his personal trajectory, which seems unusual.
Anyways, it ties in with what lessons we would want education to teach about thinking and the poor way in which school is actually implemented, with constraints.
SusanC 06.26.17 at 2:40 pm
In computer science, concurrent programs are notorious for being hard.
One of the criticisms of the Scratch programming language for teaching children to program is that the way it is set up encourages you to try and write a concurent program (typically, some kind of game) and then the language turns out to be rubbish for writing cincurrent programs. ( See, e.g. The studies by Moti ben Ari of how Scratch is used by beginner programmers). One conclusion might be is that any kanguage used to teach beginner students had better be good for concurent programs, even though this is considered an advanced topic, because the line of thought that begins “i’ve git a cool idea fir a game I want to write” is giungbti resukt in the student b eing thriwn in the deep end sooner than you’ld like.
As Moz says,hardware is typically concurrent. A simplifying assumption that may make a lot of things easier: large pieces of your chip design will typically share a common clock; crossing clock domains is relatively rare. Not sure EE students are any better at geting it right, just that that they’re going to have to tackle the subject sooner.
Anarcissie 06.26.17 at 3:46 pm
Niall McAuley 06.26.17 at 12:20 pm @ 24 —
It depends on what you want the students to be able to do. If you want them to be competent commercial programmers, I would think you would want to condense the work experience by presenting cases and asking ‘How can we solve this problem?’, and thereby digging down into the underlying technology. But I suppose that might not fit into educational technology, effective as it might be, because it wouldn’t be easy to cut it up into time slots per day and semesters and prerequsities and so on. It may not matter much, because as I said above there aren’t going to be that many jobs for actual computer programming.
I don’t think knowledge of Boolean algebra or any other form of logic’n’mathematics other than arithmetic gave me much direct help in my work, but I did once use symbolic logic to prove that a rather large specification was logically inconsistent and could therefore never be realized, which did put to death a dreadful, useless project, so it was not entirely without value. However, I doubt if those who were exploiting the project for gain appreciated my efforts.
Guy Harris 06.26.17 at 6:54 pm
JimV:
I cannot speak for PeterV, but if you’re assuming I’m complaining about something you said, you are making an incorrect assumption. I’m proceeding from what you said and building on top of it, pointing out that, if you go deeper into programming, you bump into the problem that, as elsewhere in life, not everything is what it’s claimed to be, and that teaching people that part of the job of “debugging” – whether in programming or anything else – is checking whether something you’re depending on is, in fact, dependable.
Moz of Yarramulla 06.26.17 at 8:47 pm
peterv: that is generally true. But I’ve been writing concurrent software for going on 20 years, some of it towards the harder end (not supercomputers, just tends of threads on tens of cores). Just because I still use (some of) the tools and techniques I was taught as a baby electrical engineer doesn’t mean that I don’t understand software. I’m as frustrated that my “arduino with bluetooth” board has a powerful 32 bit processor in the bluetooth part but I can’t get at it, as I am that c++ doesn’t have a usable unit testing tool.
I would prefer to see kids start learning teaching languages, then move on to modern languages like Python or for the advanced ones Scala, Go and Rust. They teach useful ways of thinking, and the codebase is sufficiently public that there is good code to read before you get too excited about writing anything.
That said, the department/school mentioned in the original article sounds pretty inspirational. I suspect partly because they don’t listen to people like us :)
Moz of Yarramulla 06.26.17 at 8:53 pm
Also, FWIW Yarralumla and Yarramulla are two different places. The latter is quiet and peaceful while the former makes cesspits seem pleasant by comparison.
One of the problems with teaching kids to code is that we still don’t have agreement on how to teach (young) adults to code, but we do have lots of examples of doing it badly. We also have a lot of really bad code around, and limited agreement on what constitutes good code. There’s no Shakespear in code, or even a Mary Shelley. Perhaps Donald Knuth counts?
peterv 06.27.17 at 5:17 am
Moz: Apologies for the dyslexic typing.
Neel Krishnaswami 06.27.17 at 9:45 am
Moz of Yarramulla wrote:
Among other things, I work on the formal verification of concurrent systems, and want to confirm that SusanC @25 exactly identifies the reason why concurrent programming is (in general) harder than digital logic. The absence of a clock is very important for program design and modularity, but it makes reasoning about programs harder.
But you’re right too — when you can afford a clock, it’s a good idea to have one. This also means that for teaching languages, replacing concurrency with abstractions based on a synchronous model of time is probably an idea well worth exploring.
(I won’t be the one who does this, though — the art is long and life is short, alas.)
Moz of Yarramulla 06.27.17 at 10:22 am
Neel Krishnaswami: oh, absolutely, lock-free multithreading is very difficult and in fact the hardware equivalent is generally regarded as too hard to be worth attempting (free-running asynchronous logic). But you’re into tiny numbers now, the 1% of the population who code, the 1% of them who write non-trivial threaded code{1} and the 1% of those who do more than use lock-free library code written by others. The other 99% of multithreaded programming is clocked out the wazoo, there are locks, synchronisation primitives and memory/execution barriers all over the place.
But what I find is that explaining stuff like locking using EE-style synchronisation diagrams makes intuitive sense to many people in a way that no amount of explanation does. Likewise (mis) using people management/scheduling tools, especially the diagramming ones, can make thread modelling easier. People are also asynchronous, optionally clocked “execution units” :) “you have to have a meeting room before you can take the projector” is simpler to most people than “you must always obtain locks in the same order”.
{1} even “trivial” threaded code is often stuffed up, see the many “how do I async” and “why don’t I benefit from parallel loops” questions.
soullite 06.27.17 at 12:15 pm
By the time kids in middle school today enter college, computer programs will be writing computer programs.
Leftists need to come up with a real solution, not ‘everyone become nurses!’ and ‘Everyone become coders!’. We’ll have machines doing both a lot more quickly than anyone here wants to admit.
Robert 06.27.17 at 1:09 pm
Speaking of thinking of people as execution units, I wonder if anybody has an opinion on this sort of exercise:
http://robertvienneau.blogspot.com/2016/04/a-steam-experience-for-flash-mob.html
Nobody has implemented it that I know of.
some lurker 06.27.17 at 3:09 pm
Anarcissie @ 19:
The elimination of (the costs of) labor is relentless (Hmm, that was a proposed name of Jeff Bezos’s little online shopping venture, come to think of it). I can’t think of a more ripe target for automation that a highly structured activity like programming/coding.
My experience with programming wasn’t about mastering logic or abstract thinking but about fiddly syntax and grammar.
As libraries/frameworks become more complex, we get closer to being able to build programs with simpler statements but then we are at the mercy of those who make the libraries/frameworks. I wonder how many people planning on making a living as highly-paid programmers are aware that someone is working just as hard to ensure they won’t?
Kiwanda 06.27.17 at 5:39 pm
Anarcissie:
This has been true since the advent of stored-program computers. Most all developments in programming languages, environments, and libraries amount to progressively automating the task of programming.
What might be new is that, for some tasks, the right neural architecture, plus enough data, plus enough training, yields high performance, without much detailed human understanding of the domain. This can be very frustrating for domain experts.
But this is somewhat independent of what jobs might or might not be available to programmers today, and where those programmers are.
dave heasman 06.27.17 at 7:09 pm
By the time kids in middle school today enter college, computer programs will be writing computer programs.
In 1986 I joined a company that marketed a computer program that wrote computer programs. It was quite successful for a while.
Moz of Yarramulla 06.27.17 at 10:31 pm
Kiwanda progressively automating the task of programming.
I think we’re still a long way down that curve, though. For the foreseeable future having more powerful tools will just increase the demand for software and allow that demand to come from previously impossible areas. We see quite a lot of talk about the obvious parts of this, from managing advertising to self-driving cars to interpreting medical images. Just wait until it gets to architecture and the practice of government rather than just controlling who gets elected.
It’s the Kurzweil-style revolutions that are hard to predict. But self-programming computers seem more like fusion power or monorails than real things to me. Sure, we can do them a bit, kind of, but they’re not going to be rolled out wholesale any time soon. For programming the core problem is “but what *exactly* do you want it to do?”… I ask my boss that all the time. He wouldn’t like it more if it was a computer asking the questions, and I’m not sure the process would be faster either.
J-D 06.28.17 at 4:21 am
soullite
If there is a problem that affects society generally, it’s not clear to me what reason there would be for suggesting that it’s specifically a problem for leftists to come up with a solution; unless, perhaps, it’s being suggested that left unopposed rightists will devise and implement a solution that is bad for most people, which now that I think of it is a fairly plausible suggestion.
peterv 06.28.17 at 9:35 am
@dave heasman #37:
We’ve had computers writing computer programs since the beginnings of AI Planning (ie, automated programming) in the 1970s and commercial Computer-Aided Software Engineering tools since the 1980s. And the rise to prominence of the API paradigm in the last 5-10 years has created a situation where developers orchestrate combinations of calls to libraries of existing programs with the management of interfaces rather than write much code themselves.
Perhaps the least useful training for this style of software development is coding traditional stand-alone scientific problem-solving programs, the sort of training which mathematicians and physicists who learn programming get. Software development and engineering moved on from that traditional model 40-odd years ago, so I wonder when scientists will eventually notice this.
The CTO of a bank recently said to me: If you have a very specific mathematical derivatives formula you wish to encode, hire a physics graduate. If you want to develop IT systems that are too large for one person to build, with code that is tested, verified and reliable, integrated with your legacy systems, and meets diverse stakeholder requirements, then hire someone who studied software engineering.
Chris "merian" W. 06.28.17 at 3:50 pm
It sounds to me as if several of the commenters have turned away from the fact that we’re talking about secondary school here. Not the stage of focussed training that equips students with exact skills they can then use to fill pre-defined positions as cogs in someone else’s economic machinery, but the expansive phase where they’re supposed to encounter and acquire a degree of understanding of a wide variety of disciplines our culture has developed, figure out what they like and are good at, and set the foundation both for being informed citizens (which requires them to know a little bit about all those fields they are not going to pursue professionally for themselves) and for learning new and narrower-tailored skills whenever needed throughout their lives (which is why we harp on reading, writing, some math and a foundation in the natural and social sciences).
One of the reasons this project is attractive is that it engages the creativity of not only those who already are computer nerds but of a wider variety of students. The result they achieved can serve as proof that building something highly desirable with the tools of electronics and computing is within their reach. Some of them may become computer programmers, but all of them are expected to use stuff built and programmed by others and to make decisions about using, buying, selecting, deploying technology; also, some of them will do creative things with computing and technology as a hobby or family activity, or use them as a tool creatively in their line of work.
So I find the whole pessimistic line of “this isn’t gonna prepare them for the jobs that’ll be available in 10 years either” quite misguided.
But since this thread has been drifting in this direction: It’s not only “leftists” who are supposed to come up with solutions for how to distribute economic resources in a time of even further increased automation and productivity. Now that *should* be a good problem to have, shouldn’t it? We don’t need “jobs” to survive: we need food, shelter, infrastructure, access to education / knowledge, health care, and structures where we interact as human beings. “Jobs” isn’t a primary need, but a mechanism of distribution of these resources: the most successful and least prone to authoritarian abuse one we’ve found, admittedly, so we do want to keep it around and not try some dubious social experiment on a grand scale. I get that. Still, a situation where we can produce all the goods and services to take care of our needs (and at the same time protect the and maintain the planet’s capacity to sustain life) so cheaply that it only needs the labor of a small part of humanity to do… well, we have choices here: a Hunger Games like society or a society of (moderate) abundance for all? If it’s to be the latter, the path would pass through the stage to reverse the extraction of profits and massively increase the salaries (in some form, not necessarily direct cash payments) these fewer employees wo are engaged in labor for the profit of others receive. Then some of this money can flow towards goods services we are told now that there isn’t enough to go around — education, childcare, art, fine woodworking, novels, poetry, hand-crafted carbon-neutral river kayaks, whatever people come up with. Money, after all, is NOT one of those limited planetary resources. It’s based on a fiction. It doesn’t HAVE to contract if fewer people are paid salaries by the same number of industrial enterprises.
While I certainly don’t have the beginning of an inkling of the dots that are needed to connect us to where we want to be, is there anything impossible (given a sufficiently advanced level of tech) about an economic organization vaguely a la Ada Palmer, where we work 20 h, and if we want can survive on pursuing a creative or scientific endeavours? OK, can of worms…
(Last, while quite likely more code will be written by other code, I don’t believe for a second that the same is going to be true any time soon for the design of software and hardware systems. We are currently facing a crisis in network and computer system security — basically, our creative resources are losing against the profit-driven creative efforts of bad guys. This isn’t going to be solved by an autonomous AI, re-purposed from churning out circuit boards in a factory in China.)
Comments on this entry are closed.