http://www.perlmonks.org?node_id=1056909

In another thread some discussion took place regarding how programming is taught to new students. And the discussion made me reflect back a bit.

My first opportunity to learn a bit about programming was when a friend's father got an IBM PC, the original, in 1980. Of course it came packaged with BASIC, and suddenly at age 12 I started spending a lot of time at that friend's home, and a lot more time reading books on BASIC at home.

In high school I took Comp Sci I: Integer BASIC on an Apple 2, and a week or so with Logo just for fun. Comp Sci II: FP BASIC, and an intro to 6502 Assembler. And AP Comp Sci: Pascal. I think about the most advanced thing we did in AP Comp Sci was implementing linked lists.

At home I got a TI-99/4A with Extended BASIC, and no other software. I think my parents' philosophy was that I should be able to write programs for whatever I wanted the thing to do. And although that was a pretty limited platform, I felt like I learned a lot. Friends had Atari 400/800's, Commodore Vic-20's and 64's, Kapros, and many other contemporaries. I think that's where I first started understanding portability issues; no two BASICs were alike, but I loved to tinker at whatever PC was available to me.

At the University my CS program was using Modula-II on Macs. I was curious about C, and had to take a class at the local community college to scratch that itch since my university CS program wasn't offering anything in C at the time. Somehow I got out before Java took over the University like a virus with no known cure.

During my early college years, at home I was using C and Pascal on an Atari 1040ST, and eventually graduated to a PC clone where I spent a lot of time with C and started digging in to C++. I discovered Perl around 1996 or 7, when I worked with my ISP to set up an email-to-pager gateway for AT&T pagers. We were even doing email subject lines forwarded to cell phones before official SMS text messaging arrived on the scene, using procmail forwarding rules and a Perl script acting as glue.

About 18 months ago I had the opportunity to get involved in some seminars on scripting languages at a community college. I was curious and reviewed the course outlines for the community college's CS-I and CS-II classes. I was surprised to discover that the courses were taught as though the students had never programmed anything at all, ever. This concept; the possibility that someone could arrive at a college level CS course without ever having programmed before was astonishing to me. One of the department's professors was a friend of mine, and she explained that if she didn't take it painfully slow at first, she would leave too many behind.

In the early 80's computers weren't of much use to anyone who wasn't interested in learning a little about programming. Of course it's been said that an entire generation of programmers has been ruined by BASIC, I am more inclined to see it from the positive side; an entire generation of programmers became interested in programming because it was so accessible.

In the modern 4-year or 2-year college settings, what level of knowledge of programming is typical? Where are young people getting their start? Is it really common to start a CS course without ever having spent time with any programming language?

Nowadays the barrier to entry in programming is higher, I think, than it used to be. In the early 80's, you had to plop down a chunk of cash for a computer with an 8-bit processor, 16kb of RAM, and a cassette deck for storage. An old TV was often the monitor. But it came standard with a useful programming environment. Now computers are everywhere. However, now our expectations of software are so high that it's difficult for someone starting with "Hello world." to grasp how that is relevant to writing the next Adobe Lightroom, or Grand Theft Whatever game. And the average user never gets anywhere near a line of code.

Many of us grew up programming. Maybe we weren't doing anything terribly complex, but we were familiar with control flow, variables, data types, and fundamental concepts. What's the modern-day story for someone pursuing an interest in programming?


Dave

  • Comment on Where does the new generation of programmers begin?

Replies are listed 'Best First'.
Re: Where does the new generation of programmers begin?
by boftx (Deacon) on Oct 05, 2013 at 01:47 UTC

    I need to preface this by saying that I just turned 60 yesterday and got my first (official) job in 1973 as a field service tech working on equipment that used TTL. (Some of those 5v power supplies could double as arc welders.) I started programming in machine and assembly as the equipment I worked moved to micro-processors and have never looked back.

    That said, I have to disagree somewhat with this statement by davido: "Nowadays the barrier to entry in programming is higher, I think, than it used to be."

    My reason for doing so is that one can get a *nix box up and running for a relatively low cost, probably less than $150 or even lower. Such a box has a full-blown development environment that I would have killed for back in the day when I had to wire-wrap my first 8080 board.

    Given the huge amount of information available for free today on the 'Net (remember how expensive it was to build a decent library?) I would argue that it is easier than ever before to learn how to program in any language one desires. Naturally, this only underscores the point that user groups (especially those for C and Perl) continue to play a vital role for those who wish to learn, either on their own or in a formal setting.

    The short, simple answer to the OP question of where does one begin is the same as it was back then: Get your hands on a machine, read and play! (Then lie through your teeth to get that first gig and learn quickly enough to do the job that no one will care that you did so.)

    On time, cheap, compliant with final specs. Pick two.
      Yes, that. (Greetings, old man, from a pup. I'll be 52 in a few weeks.) The barrier to entry has never been lower than it is now. It'll probably be lower next month. That's not necessarily a good thing.

      The big barrier, the one no one's yet solved, is that to be a programmer you must think like a programmer even before your first introduction to computers. Not only that, you have to have a passion for it, if you want to be really good or even great. That's a relatively rare combination of traits. One of the weakest programmers I've ever known had an MS in CS and a Ph.D. in Mathematics. Second to that guy was another with an MS and (then) 20+ years of experience. On the other hand, one of the finest programmers I've ever known was an autodidact with a sharp mind and great passion. I've encountered many great programmers over the course of my career, and a much greater number of weak or even completely unsuitable code monkeys.

      A person with a programmer's mind and a passion for it is going to become a programmer (and a very good or even great one) at just about any cost. One who doesn't have a programmer's mind is never going to become a programmer, and one with the mind for it but no passion is going to become mediocre at the very best. The "average user" will never become a programmer. Ever. Though PHP might try to convince them otherwise...

      The problem isn't technical barriers to entry, as they're steadily decreasing. Perl is easier to grok than C, which is easier than assembly, which is easier than machine, which is easier than brainfuck. The problem is that overall we can generate X% of the population as really good or great programmers, while the need is some multiple of X. We gotta figure out how to make smarter and more passionate humans, and that's a very tough nut to crack. And not in our bailiwick.

Re: Where does the new generation of programmers begin?
by PerlSufi (Friar) on Oct 04, 2013 at 21:07 UTC
    Hi Davido, I loved your story..very inspiring. I am currently attending online school for a Bachelors in IT with a concentration in Software Applications Development using *sighs*- Java.
    My first course involved programming a Java swing GUI to allow a user to essentially order a fictitious product and enter payment/billing information. I had very little experience programming preceding this. Mostly "Hello World" type stuff in python. Shortly after writing the Java Swing program, I submitted the code along with with my current resume to a company I found that was hiring for Perl programmers- and I'm still doing it after 6 months.
    Update: my java program and other things can be found here: www.github.com/dculver1986

      Congratulations on your Perl gig! I've noticed that your Perl has improved markedly over the past little while; you seem on the right track.

      One thing that occurred to me after my earlier post: It may be that in the early 80's we had lots of opportunities to tinker since every computer came with a programming environment. That lowered the barriers to entry to programming as a hobby, and even helped a lot of people (such as myself) decide what to study. But there were two things we didn't have: First, the Internet, which serves us now as both an inspiration and as an endless source of study and available projects. Second, quality user groups: There were hobbiest groups, but now we have organizations like Perl Mongers, programming Meet-Ups, Unix/Linux users groups, and so on, which give us an opportunity to learn, be motivated, get involved in projects, and associate with other professionals and hobbiests alike.

      I'm not sure if people just getting started know what a powerful resource they have available to them in the learning and networking available with user groups like PerlMongers, Python Meet-ups, C++ Meet-ups, Unix Users Association of whatever groups, Big Data meetups, **your local area** Open Source groups, as well as access to the broader Internet programming communities such as PerlMonks, specialized mailing lists ( *@perl.org ), and so on.


      Dave

        Thanks, davido. That means a lot ;)
        I should also mention that I am 27
Re: Where does the new generation of programmers begin?
by Laurent_R (Canon) on Oct 05, 2013 at 12:28 UTC

    davido, I found your text very interesting, but I also have to disagree somewhat with this statement: "Nowadays the barrier to entry in programming is higher, I think, than it used to be."

    I started to develop some programs in BASIC in the early 1980s, first on a TRS-80 computer, then on another micro-computer running CP/M (but I don't remember what the hardware model was) and then on an IBM PC running MS-DOS. For about 8 years I only used interpreted BASIC (plus a little bit of assembly). Then, around 1987-88, I decided that I wanted to be more serious about programming, started to learn some "more serious" languages (such as Pascal and C at the time) and even finally decided in 1989 to resume some college/university studies in CS. It was quite difficult at the time to find simply a Pascal or C compiler to run on a PC, and/or it was quite expensive. A couple of years later, I had to buy an ADA compiler and also a Borland C++ compiler, again something quite expensive when for personal use (even though I used them quite a bit, I don't think I ever got a positive return on these investments). Just a few years later, starting in about 1993, with a Linux box and the Internet, you could easily get free (in this case, I really mean free as in a free beer, not free speech) compilers and development environments for hundreds of different languages. So, from that standpoint, I think it is much easier today that it was at the time when I started.

      I agree with some aspects of davido's statement on the barrier of entry in programming. My agreement is in actual experience, I was applying EVERY WHERE for at least 6 months before I even got a response back from anyone. Most jobs that I see online ask for at least 1-3 years experience minimum. I disagree with davido's statement in the reasons you described. In short, programming is clearly more accessible than it was in the past.
Re: Where does the new generation of programmers begin?
by davido (Cardinal) on Oct 05, 2013 at 16:35 UTC

    There have been some excellent comments, and one point taken is that everyone else is right; the barrier to entry into programming both as a hobby and as a profession is lower in 2013 than in 1983. Everyone has a computer, anyone can do a little research online, anyone can download free compilers/interpreters/IDEs, etc. I, too, remember paying $300 for Borland C++ 2.0, $100 for a Pascal compiler, $39 for "Extended BASIC", etc. I never really considered the monetary aspect, but it certainly is relevant too.

    I think that what can be said is that a much higher percentage of individuals with TRS-80's, TI99/4A's, Commodore 64, Vic20, IBM-PC original, Apple 2, and other 1980-1983 computers dove into programming, at least as a hobby, than owners of computers nowadays. And that's a no-brainer; In 1983 IBM may have advertised with Charlie Chaplin that there were 10,000 software packages available. But early adopters were often people who took an interest in programming. Now there are more programmers than ever. But of the 700 million Facebook users, a miniscule percentage are also programmers. There is not a higher barrier to entry, but there are more paths that a computer user might take, programming being only one of them. And computers have proliferated society to the point that programming has become one of the less common usages of the technology.

    Still, I find it hard to understand how someone shows up on his first day of class at a university or community college, taking his first ever programming class, with virtually no previous experience programming. It's as though CS is attracts some people due to its applicability to the job market rather than for the love of programming. I think we see that a lot with professions such as nursing, law, "business"... it's just strange to me to see it happening with CS.

    One person mentioned that those who love it and have a mind for it will become programmers. Clearly not everyone loves it, and clearly not everyone has the aptitude for it. I tend to think that the love for it, and the aptitude for it sort of go hand in hand, usually; one is not likely to love something he can't do. That would be quite frustrating. On the other hand, a lot of people end up doing things they don't love. I think it would be awful being stuck in programming for someone who doesn't enjoy it. It's one of those things that if you love it you can't get enough, and if you don't, you would have to be crazy to do it. ;)


    Dave

      I definitely agree with everything you said, Dave, in this last post. I graduated with an MS in CS 18 years ago (at an age of more than 35) and ever since, in my professional IT career, I have seen so many young fresh IT people just out of college and/or university really hating programming that I also wonder how this is possible. Admittedly, CS jobs are not only about programming, but programming should still be a common knowledge of anyone embracing an IT career, and I wonder how it is possible that so many people get into that profession without any inclination for programming. I find this puzzling.

      Just a couple of weeks ago, I was asked to help another team of my company. A group of about 20 persons in charge of producing reference data for a very large business application. Most of them (perhaps 60 to 70%) with IT background, the others with a business studies background. They needed some programs to compare data between different systems. They did not have one single person able to develop the comparison programs, something quite simple that I developed in two Perl programs, one with about 200 lines of code and the other with less than 70 lines of code.

      As far as I am concerned, I am really happy that I was able about 3 years ago to find a job where most of my work is software development, this is really what I like to do (and I also do it as a hobby, for that matter). When I am developing a Perl program at work, I have the feeling that this is no real work, that I get paid for doing my favorite hobby.

      A final point though. My son will be completing this year his MS in CS. He loves programming and started writing some programs when he was about 12 and has been programming in various languages ever since. I surely helped him a bit to debug his programs when he was young, but I certainly did not push him to chose this profession, he decided by himself what he wanted to do. This was just to say that you can still find today people who embrace this activity because they like programming. This is probably obvious, but I just wanted to report a case that I know first hand.

        Still, I find it hard to understand how someone shows up on his first day of class at a university or community college, taking his first ever programming class, with virtually no previous experience programming. It's as though CS is attracts some people due to its applicability to the job market rather than for the love of programming. I think we see that a lot with professions such as nursing, law, "business"..

      I'm not so sure that someone going into 1L or first-year nursing knows much about their field, unless they've been doing a ton of subject matter reading. Those students get into their programs because their aptitude has suggested they'll do well in that field. As far as that goes, I would suggest that it's way easier for someone to arrive at first-year CS already intimately familiar with database arcana, all kinds of networking information, and deep knowledge of one or more languages. They'd be the ones fiddling over cleaning up their program output and making the source code squeaky clean instead of walking that cute blue-eyed girl home (guilty!).

      I would say that the barrier's a little higher for those on Windows-based systems, because the simplest 'Hello, World!' program means creating a window and writing text into it. However, I haven't used an VB or C++ IDEs -- perhaps writing something like that's trivial -- but getting that done in a command line environment like the one that Linux provides is way easier.

      Alex / talexb / Toronto

      Thanks PJ. We owe you so much. Groklaw -- RIP -- 2003 to 2013.

        In the Visual Studio (VB, C++,etc) IDE the hardest part is figuring out how to use it the first time. The simplest program in a Windows environment is still a "console" application, but to create one you need to start a project with some settings that are different from the defaults. I can't remember them offhand, but if I booted to Windows and fired up VS I'm sure I could walk through them again.

        Once someone finally gets a project set up that can do console apps, "Hello World" in C++ is pretty much the same under VS as anywhere else, though a common mistake is to not notice the console pop up with output, and disappear in the blink of an eye.

        If you don't blink, you'll see it. Or compile and run it in debug mode so the console stays open, or just get out of the IDE and run it from a console window.

        Of course doing that as a "windows" app (native MFC, or managed/.NET) is much, much more intimidating. :)


        Dave

Re: Where does the new generation of programmers begin?
by tobyink (Canon) on Oct 08, 2013 at 11:49 UTC

    When I started university (1999) I was already familiar with Javascript and several BASIC varieties (including QBASIC and VisualBASIC).

    At university in our first year, first term we were taught Haskell. In the second term we moved on to an OO/procedural language which you won't have heard of. In third term, we had a course which covered all of C, C++ and Java - as you can imagine, not in much detail.

    What happened after that depended very much on what modules you chose. Prolog was the standard language for AI courses; SQL was used in database courses; etc. For projects you were generally allowed to choose whichever language you liked - I usually used Haskell or Perl.

    Looking at the current syllabus it appears that Java has pushed out Object-Oriented Turing. I'm glad to see that the Programming I course is still firmly focussed on Haskell.

    use Moops; class Cow :rw { has name => (default => 'Ermintrude') }; say Cow->new->name

      That sounds like a pretty solid program! Haskell as a first course? Cool.


      Dave

      During my short stint in college -- the first semester of an engineering program -- the main language being taught was Fortran, and the machine being used was a Vax mainframe. After dropping out and getting a Commodore 128, I learned a little BASIC and more 8502 and Z80 assembly programming, and later some C. A few years later, the first Internet provider opened for business in the area, and they had a Unix system (SunOS, I think) that you could shell into as part of your account. So I started learning shell/awk/sed (still logging in with a terminal program on my C128), and that led pretty quickly to Perl.

      I think it worked out for the best. I might have learned some useful programming theory and algorithms and such had I stayed in college, but the language and OS were already on their way out. On my own, I stumbled into languages and systems that I'm still using today, so very little learning has been wasted since then (except a few days I once spent learning ActionScript because I was thinking of writing a Flash game). I did learn Java when it was the Next Big Thing, which I try to stay away from now, but I still consider that useful since it taught me that OOP isn't the answer to everything.

      Aaron B.
      Available for small or large Perl jobs; see my home node.

Re: Where does the new generation of programmers begin?
by sundialsvc4 (Abbot) on Oct 09, 2013 at 13:10 UTC

    I think that we’re all beginning to do here, what we once chided our grandfathers for doing:   waxing eloquent about “the good ol’ days.”   :-)

    ... when the actual future is most-likely to be (IMHO...) “nothing at all like it.”

    What we are unwittingly discussing here is the current status-quo, namely, “the sort of ‘bespoke’ applications that we now know how to construct using Perl.”   To do anything-at-all, we are obliged to string-together the very simplest of components ... hashes, arrays, procedural subroutines ...to create an analog of exactly-the-right process that is required for a single CPU (usually ...) to do, such that, if it does this thing correctly, it will “solve the problem.”

    To the next generation of “programmers,” those notions will be as quaint as vacuum-tubes ... because they won’t be “programmers” at all, not in the present-sense that we know.   In fact you can begin to see this already, although the computing complexes that are capable of doing this sort of thing today are confined to industrial-plant sized installations that require megawatts of power-supply (and top secret budgets).

    It will not be a world of lovingly hand-crafted “solutions” ... all of which speak of today’s relative (still ...) scarcity of computing power.   The present day role of the “programmer” .. just my 2¢ here, mind you ... will not exist, nor be in any way necessary.