1
0

Teaching everyone to code is delusional


 invite response                
2015 Jan 1, 5:45am   19,644 views  71 comments

by Heraclitusstudent   ➕follow (8)   💰tip   ignore  

http://singularityhub.com/2014/12/28/future-of-work-part-ii-why-teaching-everyone-to-code-is-delusional/

Since 2005, Ive been grappling with the issue of what to teach young people. Ive written curricula for junior high students in the US, for a UNICEF program reaching students in a dozen countries, and now, for East African young people as they become financially literate and business savvy. Through the years, Ive watched program directors demand young people focus on foolish content because it lined up with something trending in the public discourseunits on climate change; modules about using social media to share stories; lessons on agricultural policy; and so forth. What have I learned? The attention of a...

Comments 1 - 40 of 71       Last »     Search these comments

1   marcus   2015 Jan 1, 6:15am  

I get the author's point, but I would argue that he's not clear in what he means.

If he means that not everyone should get a degree in programming or software engineering, then of course I agree with that.

But the idea that most students should have a programming class or two, even if they are business majors or any type of science or design major or even liberal arts major is in my opinion something that is worth considering.

As a high school Math teacher, teaching Math classes that mostly have a trajectory towards one specific branch of Math, that is engineering, science and business applications, I know that this is the classic Mathematics path for students. But as programming becomes easier in some ways, and ubiquitous, that is relative to vast libraries of functions and so on, it seems to me natural that more people should choose to get acquainted with programming. That is, I think the part of a typical high school and college curriculum taken up by Math, may have to evolve to include a programming class or two. Just my opinion.

(don't get me wrong when I say programming is getting easier. At the level of the specialist or the architect, the experienced specialized programmer will always be a skill that takes time and natural ability and even some luck (relative to skills learned on the job) to acquire and will always be decently paid.)

One of the benefits of having at least a couple classes in computer science or programming is that people can find out if they think it's fun and want to pursue it further. But also later, in their work career, they might very likely find themselves interfacing with programmers of some kind, possibly even overseeing projects that have a software component. At least they will find themselves somewhat conversant and or they may want to try at that time to learn more of what's going on with a project, and not have to start from scratch.

Even being able to think about and discuss at a high level what you want a program to do (not actually doing the coding), is much more doable if one has a couple of programming classes under their belt.

2   Rin   2015 Jan 1, 6:27am  

First of all, why is everyone attempting to re-engineer K-12, when anyone with an internet connection can watch the following course on Analysis of Algorithms ...

http://www.youtube.com/embed/JPyuH4qXLZ0&index=1&list=PL28045DE32CB7B098

And decide for himself, whether or not he wants to go for either a computer science or some other engineering/science program?

3   Peter P   2015 Jan 1, 6:29am  

Most computer science graduate cannot code.

Programming is more like painting. It is more of an art than a skill.

Everyone should take a painting class just to try.

4   Peter P   2015 Jan 1, 6:32am  

Learning algorithms will not make you a good programmer. 90% of all software is glue.

5   Rin   2015 Jan 1, 6:46am  

Peter P says

Learning algorithms will not make you a good programmer. 90% of all software is glue.

The point is that it's a key delimiter in determining if a field like computer science, operations research, or some other related engineering work is of interest.

Algo analysis is what's known as a interdisciplinary study, you can use it to optimize chemical reactor kinetics, as well as a host of other technical problems.

And what's a part of that so-called glue? A big part of it is in determining how to make more efficient features, so that performance isn't compromised, so yes, one needs to know algorithms to begin to become a coder.

6   marcus   2015 Jan 1, 6:56am  

I think by "glue" he meant for example the way that java code connects to an Oracle data base on one end, and some totally other language API on the other end. Those are those specialist skills that one doesn't learn in college.

Rin says

when anyone with an internet connection can watch the following course on Analysis of Algorithms ...

Sure like everyone with the potential to benefit from such a lecture is going to be

a) self motivated enough to work through those lectures

b) not better able to handle that class after a couple of basic programming classes, as well as a sufficient amount of Math experience to not be intimidated by the vocabulary and notation

7   Rin   2015 Jan 1, 6:56am  

Peter P says

Everyone should take a painting class just to try.

I'd say music because music forces one to apply a certain amount of layering of structures, without the help of a visual screen. So the best coders would be decent musicians who can do science and engineering coursework.

8   Peter P   2015 Jan 1, 6:58am  

Rin says

Algo analysis is what's known as a interdisciplinary study, you can use it to optimize chemical reactor kinetics, as well as a host of other technical problems.

The vast majority of CS graduates do not remember a thing about algorithms. A proper class in operation research and optimization would be more useful.

Rin says

And what's a part of that so-called glue? A big part of it is in determining how to make more efficient features, so that performance isn't compromised, so yes, one needs to know algorithms to begin to become a coder.

Quite literally how software is put together in terms of architecture and information flow.

Nowadays, code efficiency is not nearly as important as scalability as your user base grows. You can throw money at inefficient code but not non-scalable software.

9   Rin   2015 Jan 1, 6:58am  

marcus says

I think by "glue" he meant for example the way that java code connects to an Oracle data base on one end, and some totally other language API on the other end. Those are those specialist skills that one doesn't learn in college.

In earlier versions, a lot of programmers wrote C-program "user exits", to leave Oracle's PL/SQL internal application environment, because of poor performance of Oracle's prior solutions. In time, Oracle got it right but earlier on, smarter programmers created their own workarounds.

10   Rin   2015 Jan 1, 7:02am  

Peter P says

but not non-scalable

Scalability is what many of us chemical engineers worry about. At least those who used to have actual jobs in the profession. Thus, all you're basically saying is that it's an engineering problem.

Peter P says

The vast majority of CS graduates do not remember a thing about algorithms. A proper class in operation research and optimization would be more useful.

Like I said, the MIT youtube posting is a good start. If a student can't understand that, then there's no point in proceeding onwards. And if CS grad can't remember their algo coursework, then they can be sacked.

11   marcus   2015 Jan 1, 7:17am  

The other thing about learning algorithms in isolation is that its quite a bit different than the interesting programs one writes in a typical 200 level level programming course. In such programs there is some thought and planning involved in how to use objects, container class objects, inheritance, polymorphism and so on all in what might be a somewhat complex larger project that does whatever. Thinking through the higher level functionality is the fun and interesting part. It's different than learning about algorithms in isolation.

By the way, an algorithms class is often a 3 or 400 level course, that would come after the one or two programming classes I was suggesting for non future programmers. Granted, MIT might do it differently.

12   Rin   2015 Jan 1, 7:20am  

marcus says

Sure like everyone with the potential to benefit from such a lecture is going to be

a) self motivated enough to work through those lectures

b) not better able to handle that class after a couple of basic programming classes, as well as a sufficient amount of Math experience to not be intimidated by the vocabulary and notation

Marcus, in comparison to some extremely poorly written books on probability, pre-calculus, calculus, and differential equations, the MIT/youtube lectures on Algos are a godsend.

When I was a kid, no such resources were available; we had these worn out, unreadable texts at university libraries. Kids were always told that science university books are 'hard'. The idea was to make kids doubt themselves and never strive to get past Algebra II and Geometry.

Today, if I were in the 7th/8th grade, instead of wasting this winter break, I'd be on youtube all day, soaking up the material. Sure, some notations and concepts, like diagramming recursion trees, etc, may throw me, but hey, all that stuff is recorded and can be reviewed. I can easy cross reference to other courses, if adjacent components are useful like statistics and probability.

13   Rin   2015 Jan 1, 7:23am  

marcus says

It's different than learning about algorithms in isolation.

Actually, this type of course is training the mind of an engineer. In junior high Algebra, we knew that quadratic functions grew faster than linear ones, however, it's here where we find it why that's significant.

14   Dan8267   2015 Jan 1, 7:25am  

Heraclitusstudent says

Teaching everyone to code is delusional

90% of professional software developers in the U.S. can't code properly. Why not raise the standards for software development instead of just trying to get more warm bodies into the field? The cheaper it becomes to "train" -- and I use that term loosely -- a developer the crapper the developer will be.

Writing software is like writing a symphony. It is an inherently creative and original task. There's no point in writing software that has already been written because it's cheaper just to use the existing software. That means any software worth writing does something never done before. Therefore, software writing is inherently a skilled profession and requires talent.

Attempts to get everyone to be coders is simply an attempt to dumb down coding -- hell, even the word "coding" is a demeaning term used to trivialize the talent and skill required to write good software.

Yes, teaching software development could instead be used to smarten up people, but first the teachers and the student must actually respect the sophistication of software development. You would think this would be easy when the impact of software on our society has been greater than anything else, maybe save hardware, including cars and religion. Software has fundamentally changed the way people work, play, communicate, enforce laws, research technologies, purchase goods and services, listen to music, and pretty much everything else in life.

15   marcus   2015 Jan 1, 7:26am  

Rin says

Today, if I were in the 7th/8th grade, instead of wasting this winter break, I'd be on youtube all day, soaking up the material. Sure, some notations and concepts, like diagramming recursion trees, etc, may throw me, but hey, all that stuff is recorded and can be reviewed. I can easy cross reference to other courses, if those adjacent components are useful like statistics and probability.

I totally agree wit you.

But I wasn't really thinking only of the most gifted and self motivated students. I was thinking about the value of programming classes for your sort of average to somewhat above average college student.

Yes, if motivated, they might be able to do god knows what on their own, and there are vast wonderful resources out there these days.

I'm not in disagreement with you. But rather making a different point.

That lecture and other MIT lectures are something I would view, even now for pleasure, if I get through letters of recommendation and other piled up busy work I have to do while on break.

16   Rin   2015 Jan 1, 7:27am  

Dan8267 says

Writing software is like writing a symphony.

Yes, this is why I'd brought up music, as a comparison. It's basically fusing the talents of a musician with that of a trained engineer or scientist.

17   Rin   2015 Jan 1, 7:35am  

marcus says

I was thinking about the value of programming classes for your sort of average to somewhat above average collage student.

The thing is that the science and engineering fields, in general, are not for the average to above average kids. For the most part, what ordinary people learn to do is write a few Excel macros and work with a few business tools like Powerpoint and so forth. That's generally enough to work in a back office for some public organization or private firm.

In general, the average kid will seldom get those technical internships/CO-OPs at Exxon-Mobil, United Technologies, Google, etc. And so in reality, the actual trajectories for STEM grads are already an elite outplacement. Typically speaking, no junior year internship means no future job placement. This is why you see so many STEM grads starting in sales support because there really aren't enough R&D type of jobs for them, at least not in America.

18   marcus   2015 Jan 1, 7:41am  

THe question I was trying to consider, which may even be different from the author of the OPs article was:

With the radically changing work environment, that we can't really even predict say 10 years out, does it make sense for some programming classes to be part of a basic curriculum, much as say Biology or precalculus is today ?

Possibly even in high school ?

The goal would not be to dumb down the profession. IT would be a way with real life applications to get students involved in thinking about the logic and very basic programming structures.

LEt's face it, a lot of what is often referred to as programming these days, isn't anything like software engineering. It's more like using a somewhat sophisticated application, but there is still some basic programming logic involved. This could be writing simplke SQL queries, or it might be using one the new fangled high end (large scale) website development packages. I little programming background would come in handy.

19   marcus   2015 Jan 1, 7:45am  

Rin says

In general, the average kid will seldom get those technical internships/CO-OPs at Exxon-Mobil, United Technologies, Google, etc. And so in reality, the actual trajectories for STEM grads are already an elite outplacement. Typically speaking, no junior year internship means no future job placement. This is why you see so many STEM grads starting in sales support because there really aren't enough R&D type of jobs for them, at least not in America.

Again, missing my point entirely. But that's okay.

We talk about all the various types of robots and smart systems that will be in the average work place.

marcus says

With the radically changing work environment, that we can't really even predict say 10 years out, does it make sense for some programming classes to be part of a basic curriculum, much as say Biology or precalculus is today?

Possibly even in high school ?

20   Rin   2015 Jan 1, 7:55am  

marcus says

With the radically changing work environment, that we can't really even predict say 10 years out, does it make sense for some programming classes to be part of a basic curriculum, much as say Biology or precalculus is today ?

I'd say that a business analyst type of course would be useful.

This may consist of a MySQL database with a basic sales/inventory type of system. And then, the use of let's say a Visual Studio (or some other UI utility) to access this system, both as an end user and as customization programmer analyst.

All and all, it's simple, in the sense that it's about tracking customers and the widgets they'd brought but at the same time, allows a person to learn about writing SQL or business objects to access the database, as well as modifying the look and feel for the end user.

Some of the assignments may include adding a general ledger feature as well as targeting the high paying customers for rewards and benefits. These are all business concepts and apply to the world in general, not just for STEM fields.

21   marcus   2015 Jan 1, 7:57am  

Most students take a certain amount of Math, Science, History, Literature as part of what is currently deemed to be part of a well rounded general education. All of these may or may not pertain directly to what the students later do for work.

My hypothesis is that maybe some logic courses or even basic programming should be added to the mix, to account for EXTREMELY recent and ongoing impact of computers in all areas of our lives. What the hell, everyone has a computer in their pocket at this point.

This is a far cry and nothing like suggesting that everyone should be trying to get an engineering job at google.

22   Rin   2015 Jan 1, 8:01am  

marcus says

My hypothesis is that maybe some logic courses or even basic programming should be added to the mix, to account for EXTREMELY recent and ongoing impact of computers in all areas of our lives.

I think that my business systems analyst course would fulfill your goals, without the subject being too techie and related to some high end undergraduate engineering analysis.

The idea in my course is to present the computer as a tool for business, not the computer itself. Thus, the coursework highlights the technical aspects w/o it being the focus of the content.

23   Peter P   2015 Jan 1, 8:48am  

marcus says

I think by "glue" he meant for example the way that java code connects to an Oracle data base on one end, and some totally other language API on the other end. Those are those specialist skills that one doesn't learn in college.

That is one example. Another one would be the communication between mobile apps and the server. Or even the interactions between logical data storage on different processes.

24   Peter P   2015 Jan 1, 8:55am  

They should teach the merit of a well-designed type system. That art is long lost.

Static-typing in object-procedural languages like C/C++/Java is tedious but inadequate.

On the other hand, dynamic-typing is too dangerous.

25   Peter P   2015 Jan 1, 8:57am  

Also, anyone who cannot pick up a new language in two weeks should not be a programmer.

26   Rin   2015 Jan 1, 11:16am  

Peter P says

Also, anyone who cannot pick up a new language in two weeks should not be a programmer.

A number of accountants and tax types have made a living, simply programming Excel macros for their work.

27   Peter P   2015 Jan 1, 11:45am  

Rin says

Peter P says

Also, anyone who cannot pick up a new language in two weeks should not be a programmer.

A number of accountants and tax types have made a living, simply programming Excel macros for their work.

They make money as accountants and tax types, not as programmers. :-)

28   Peter P   2015 Jan 1, 11:46am  

Hey Rin, have you heard of a TV show called You're the Worst? It is sexy and funny. I think you might like it.

29   Dan8267   2015 Jan 1, 11:50am  

Peter P says

Static-typing in object-procedural languages like C/C++/Java is tedious but inadequate.

C and C++ suck, but I have found no problems or limitations with the strong typing by Java or .NET. Both languages have a rich reflection API that make them far more dynamic than any so-called dynamic languages.

It has been my observation that any time a developer had problems figuring out what type of object he has or has to create, the developer really had a far more fundamental problem of not understanding the software he was writing or the API he was using.

I have yet to see a disadvantage of strongly typed language. And, no, performance isn't even one of them, but if it were, it would still be a damn good trade-off. One of the biggest difference between a good programmer and a crappy one is that the crappy one thinks shaving 10% off an algorithm is an improvement and the good one knows that scalability is what really counts, going from O(n^2) to O(n). Premature optimization is the root of all evil.

30   mell   2015 Jan 1, 12:18pm  

Peter P says

Static-typing in object-procedural languages like C/C++/Java is tedious but inadequate.

You can use Scala to craft higher-kinded types/functions. Java is rock-solid and (esp. with Java 8 embracing more functional concepts) given the mediocrity of the average programmer an adequate choice. Groovy is just plain slick and node.js is here to stay, so better be a polyglot these days.

31   Peter P   2015 Jan 1, 1:23pm  

Don't get me wrong, I love strongly-typed languages. However, I would like to see a rich type system such as the one in ML or F#. Rich typing does wonders in enforcing program correctness.

There is no type inference in C/C++/C#/Java and it is tedious to repeat type declaration everywhere. Scala is much better at this. However, sometimes it is hard to avoid covariance/contravariance oddities in the generics.

I was an early adopter of Groovy/Grails (2008). Back in those days, it was hard to get things done without digging into framework source code.

Scala is very close to being an ideal object-oriented language. It has so much potential. Unfortunately, it is too complex. Is there a stable IDE yet?

32   Peter P   2015 Jan 1, 1:28pm  

Dan8267 says

It has been my observation that any time a developer had problems figuring out what type of object he has or has to create, the developer really had a far more fundamental problem of not understanding the software he was writing or the API he was using.

Well, the duck-typing folks have a different view on this. They worship an *extreme* form of TDD and spend much time writing trivial tests like method invocation.

33   Dan8267   2015 Jan 1, 1:48pm  

Peter P says

There is no type inference in C/C++/C#/Java and it is tedious to repeat type declaration everywhere. Scala is much better at this.

Sure, there is room for syntactical improvement, but typing has never been the bottleneck of programming. Debugging is. So it's a bad tradeoff to accept hours of debugging a problem that would not even occur if the code is clearer even if that means being a bit more verbose.

Peter P says

However, sometimes it is hard to avoid covariance/contravariance oddities in the generics.

Whenever there is a problem with variance, it is because the developer is doing something wrong. Usually it's an old mistake that has become habit.

Peter P says

Is there a stable IDE yet?

I don't know. I've been doing .NET mostly the past few years. However, it's most likely that you'd get the best experience from Eclipse, which is an awesome IDE. I don't know if anyone has written a commercial grade and free Eclipse plugin for Scala, but hey, you could be the first. Eclipse can compile anything if you give it a compiler that follows the Eclipse plugin model. Eclipse is highly extensible.

Personally, I've always felt that the weak point in software development has always been the software between the ears. Good developers are exponentially better than mediocre ones because good developers are clear thinkers who can build good mental models of the solution they are trying to build before writing a single line of code.

34   Peter P   2015 Jan 1, 2:02pm  

Dan8267 says

So it's a bad tradeoff to accept hours of debugging a problem that would not even occur if the code is clearer even if that means being a bit more verbose.

It is fine with simple classes but type inference is absolutely necessary when you allow the type to be a function of a double and an integer returning a String. :-)

Type inference allows safety and readability to coexist. Also, a rich type system can detect many potential issues statically.

Dan8267 says

Whenever there is a problem with variance, it is because the developer is doing something wrong. Usually it's an old mistake that has become habit.

Usually it happens in API design when usage is hard to anticipate.

.Net has better support of generics than Java.

Dan8267 says

However, it's most likely that you'd get the best experience from Eclipse, which is an awesome IDE.

I hate Eclipse. I much prefer IntelliJ. It does have a Scala plugin which I have not tried recently.

Modern languages like Scala can really use a good IDE for things like refactoring and inspection.

Dan8267 says

Personally, I've always felt that the weak point in software development has always been the software between the ears.

Of course, but Java and C# allow mediocre programmers to be employable and semi-productive. :-)

They would have negative productivity with C/C++.

35   mell   2015 Jan 1, 2:22pm  

Peter P says

Is there a stable IDE yet?

IntelliJ is supposed to be the best, but Eclipse has actually quite matured by now. Luna with the Scala IDE is bearable, which is definitely a big step. Scala is not easy for IDEs to adapt, the compiler still takes quite a while although incremental compiling cuts down on it, and sbt still sucks. I prefer old-school Maven 3 for project and dependency management, or grade/Ivy.

36   Peter P   2015 Jan 1, 2:27pm  

mell says

Scala is not easy for IDEs to adapt, the compiler still takes quite a while although incremental compiling cuts down on it, and sbt still sucks.

Yeah, I bet it is a monster to implement tools for. Ironically, Scala is much less compelling without a good IDE.

37   Dan8267   2015 Jan 1, 3:11pm  

Peter P says

It is fine with simple classes but type inference is absolutely necessary when you allow the type to be a function of a double and an integer returning a String. :-)

Type inference allows safety and readability to coexist. Also, a rich type system can detect many potential issues statically.

Type inference is just syntactical sugar. It doesn't change the rules of how things are called and what gets passed to methods.

In my opinion, type inference just makes code less readable. For example,

var age = CalculateAge(subject);

may be shorter than the following

DogAge age = CalculateAge <Dog> (subject);
HumanAge age = CalculateAge <Human> (subject);
int age = CalculateAge(subject);
decimal age = CalculateAge(subject);

where
enum DogAge = {puppy, youngAdult, oldAdult};
enum HumanAge = {baby, toddler, child, adolescent, youngAdult, middleAge, senior};

but how is the first line, var age=CalculateAge(subject), more readable other than being shorter. If you don't know what CalculateAge is returning or which overload of CalculateAge is being called, then it's less readable and you are more likely to make a mistake in interpreting the code.

Worse yet are languages that allow the type to be changed like JavaScript. Then you don't know if integer or floating point arithmetic or even string concatenation is being used. Can you tell what the line below prints?

var years = GetYearsSinceEpoch1900(DateTime.Now);
output.Print(years + 1900);

It could just as easily print "1151900" as it could print "2015". Now change the var to int or String and now it's obvious.

I prefer the ideologue of clarity over brevity expressed in the phrase "always be explicit". Scala, from what I've read and watched, is inconsistent in this principle.

38   Dan8267   2015 Jan 1, 3:31pm  

Peter P says

Usually it happens in API design when usage is hard to anticipate.

Ah, but API design is pretty much all of programming. When you are calling your own API or your coworkers are or a third party is, software design is essentially API design.

There is a school of thought that says the first time you solve the problem it is just to understand the problem and you should throw away your solution. The second time you solve the problem, you'll have the right solution.

Peter P says

.Net has better support of generics than Java.

How so? I've found them to be about on par.

Peter P says

Of course, but Java and C# allow mediocre programmers to be employable and semi-productive

There are mediocre programmers everywhere. It has been my observation that most tend to stay away from Java and C# and prefer languages like Visual Basic, Perl, JavaScript.

Peter P says

They would have negative productivity with C/C++.

Unless you are doing embedded programming or have to interact with a legacy system, there is no point in doing C or C++. To some degree they were necessary to call unmanaged, OS-native libraries through JNI or "unsafe code" in .NET, but today that's largely unnecessary.

Kernighan and Ritchie C was terrible even in basic syntax. It took ANSI over a decade to finally get ANSI C into a decent language, whose main value was being a high-level version of assembly language, hence it's usefulness when interacting directly with hardware. But unless your doing that, there's no point in C anymore.

There's even less point in C++ as it's a mediocre object-oriented language and it's obsolete. Both Java and .NET are/have much better language and both are managed platforms, which is much more useful.

Finally, there is no reason to take pride in knowing C or C++ instead of their modern counterparts. It doesn't make you a better programmer to write lower-level code. Sure, you have to understand how sorting, graphics, databases, filesystems, etc. work, but there's no point in reinventing the wheel. Writing function pointers in C doesn't make you a guru. And this is coming from someone who not only mastered C and C++ 30+ years ago, but also had no problem writing in 80x86 assembly language.

.NET and Java aren't kiddy toys. They are the predominant platforms of the Internet, and there are damn good reasons why. I have yet to see anything other than low-level hardware code that can be implemented easily or elegantly in any other language that couldn't be implemented easily or elegantly in .NET or Java. (One caveat: String to enum conversion is better in Java.)

Of course, I'm always willing to look at an example.

39   lostand confused   2015 Jan 1, 3:42pm  

Why would anyone want to code in this day of offshoring and H1Bs. Sure you need some to clean up the work after them-but its heyday is gone.

40   Rin   2015 Jan 1, 4:02pm  

Dan8267 says

And this is coming from someone who not only mastered C and C++ 30+ years ago

I'm afraid to ask, but how old are you?

As a toddler, I was not interested in academia ... just in playing with toys. Then, I'd started reading about history, archeology, etc. My true interest in the sciences, started after the 5th grade.

Comments 1 - 40 of 71       Last »     Search these comments

Please register to comment:

api   best comments   contact   latest images   memes   one year ago   random   suggestions