Anecdotally, what I've seen is that older programmers, in addition to being programmers, also have the skills of a computer helpdesk technician. They can debug Windows problems, hardware problems, know how to mess with the BIOS, and have no problem installing or configuring any piece of software. This helps immensely when setting up your IDE or debugging weird problems with compiling.
Younger programmers seem to commonly have zero knowledge in this area. If they run into some problem with their environment, they are completely stuck. Oh, they're asked to install a VPN client but it doesn't work and they have to debug it? They're completely blocked. They have no idea how to continue.
For me, I learned these basic computer skills first (because I was obsessed with computers as a child). Then I learned to program.
I think this is a side effect of teaching programming as a career skill. You have people that want to be programmers but don't include "computing" as one of their hobbies. So of course they don't know anything about how to debug computer problems. This is totally expected.
Teaching these skills in CS curriculum would probably be a good idea.
I agree completely --- being one of the "older programmers" --- and think it could be phrased thus: a new generation of "coders" is being forced to learn how to write instructions for the machine, when they are barely computer-literate.
Having taught some introductory CS courses a few years ago, the amount of struggling with basic things like file naming, directory hierarchies, and even simple hardware use was a constant distraction.
On one memorable occasion, I had to help a student by turning on the monitor: he would sit down at a workstation, move the mouse and tap the keyboard, and seeing nothing show up on the monitor after a moment, go to another unoccupied one. I watched, without intervention, him try this with all the unoccupied workstations in the lab until he finally came to me and said, in an exasperated tone, "all the computers left are broken!" I lead him over to one, and upon pressing the power button on the monitor, the expression he made was quite unforgettable...
I think that's a side-effect of degrees that focus only on coding or applied math, whereas before the computing industry was as developed as it is now and there was less specialization within it, a CS degree would have covered the basic data structures and algorithms that were common knowledge then and still had plenty of time to cover systems things. My degree wasn't in CS - it included basically a CS minor, but it also focused on network protocols and hardware architectures that most CS students had never heard of. So when I was interviewing for jobs around graduation and was asked to explain everything that happens after someone types "google.com" in their browser, I could explain all the network protocols in detail right down to how binary was encoded into specific 5V fluctations on certain lines, DNS resolution, routing algorithms, the server's filesystem, etc. But when I was doing a coding problem and they asked me what the invariant was in my loop, I had to ask what an invariant was. And yet I had been coding full time for 4 years by that point and never needed to know that term. I knew stuff CS majors didn't, and they knew stuff I didn't. It was different specialities, each of which really filled 4 years of heavy, heavy semesters.
I agree with your observation, but I don't agree with your diagnosis of the cause. I think it's mostly down to the increasing abstraction and ease of using software. When I was a kid, I wouldn't have described "computing" as a hobby, but just getting certain games to install and run on my parent's cheap Gateway PC would require a lot of fiddling around. My younger siblings have no more or less interest in computing than I did, but if they want to play a game they can seamlessly download and run it from Steam or the app store.
I absolutely agree with your first few paragraphs. As a hobbyist before I was a professional (Linux desktop since '95), I'm surprised when I meet people who have a technical skill but not a hobbyist background. I first encountered it with Oracle DBAs who sometimes were amazing at Oracle but had rudimentary Unix skills, and that's becoming more commonplace as people do things like phone app development but without the background "we" expect (whether rightly or wrongly).
That said, my background as a Sysadmin/Ops person also landed me in my own silo. I don't have much programming experience, and running production systems means NO, the environment does NOT give you access to wide-open CPAN, RPM, pip, whatever downloads. It's a regimented release process where someone upstream has to provide the relevant dependancies and you don't just go around installing stuff, running services, etc.
As a result of my background and not being a developer, on HN I hear of new languages/frameworks/libraries/methodologies on a daily basis. Things that, clearly, a large number of readers hear must already be familiar with, even though many of them will be out of fashion in 6 months.
And then the process to install a lot of these things is "oh, just pipe a wget of this script into bash, RPM install this, pip install that, don't worry, it's all quite safe for your system..."
Creating a program that meets todays' users expectations is what's harder.
But learning programming by itself, is way easier.
We have Python, Ruby, Javascript... We have the Web as a platform and as documentation. We have communities and cheap, fast computers.
The hello world has never been easier to do.
What's hard is to make a real time offline first SPA with a beautiful responsive design that uses the same API backend as the mobile app while integrating with third party Saas and leveraging social medias.
We also used to have BASIC pre-installed on a lot of different systems, and were able to write a GUI just by writing to the frame buffer directly.
A helloworld was just:
10 PRINT "Hello, World!"
I learned to program in BASIC, with just the on-disk manuals. I can't say that it's easier today - I didn't need anything extra back then, and had a snake game up and running in a couple days from never knowing programming.
Today, we don't even have access to an unbuffered get_char by default, and you need to either modify how the shell is running or reach for a heavy library.
The article is specifically discussing the ease of getting into an IDE on a new PC. When I started, I could turn on the PC, type “basic”, and press enter. Now, at minimum, I would need to know to start notepad, save an html file, point a browser at it, and type some html and js boilerplate. That’s what the article says is harder (except the article goes on to discuss installing other languages, which is even harder).
Agreed. The hard parts of programming have been removed ( especially for entry level people ).
> We have communities and cheap, fast computers.
And online tutorials ( youtube, coursera, etc ).
Learning to program today is much easier than just 10 years ago.
Not only that, the setup to start programming today is much simpler. Not only does almost everyone have a computer, there are IDEs/programming suites available that eases you into programming.
I disagree. We currently have 5 SaaS companies. We are finding that we are writing lesser and lesser code. Most of our services have 300-500 lines of code and a product is composed of 5-6 such services. We've not found any difficulty in selling it but yea some niches are crowded with tons of competition. I do both backend and frontend for SaaS at my company.
Not just some book, usually lots of books, from the fundamentals of BASIC to technical references with complete schematics for the entire machine. I had a Commodore VIC-20 and it certainly came with all these.
And even then, experts and resources were available online, for suitably primitive values of "online". Think CompuServe.
Another thing we had back then but less so today was magazines, full of programming and technical tips and info, usually tailored to a particular computer family. (So, Commodore magazines, Tandy magazines, Apple magazines, etc.) Once business computing took off, the dominant players (PCMag, MacWorld, etc.) became more productivity-oriented -- but I still learned Windows programming from the free utility and programming columns in early 90s PCMag. And then once the Web hit, the dead tree publishers were fighting over scraps.
I remember when I was first learning Java, whacking my head repeatedly against all these sorts of problems - WTF is a JRE vs. a JDK, why is it asking to install a browser toolbar, WTF is Eclipse and why doesn't it just let me run the file that I'm working on without going through half an hour of researching "Run configurations" and classpath BS first, etc. It was doable, but as a new person to the whole ecosystem, it was seriously painful to even get to the point where "Hello, world!" would run. Then I tried to get OpenGL working (I wanted to do games), and I probably blew an entire week futzing with configuration just to draw a rectangle on the screen. TBH it was harder than getting the same thing done in C++.
And compiling it all into a Real Executable that would run on Windows like a normal program? Forget about it...not even to get into Web Start, applets, Maven and JavaFX (remember that disaster?), oh my!
Then I discovered Processing, which bundled everything (Java runtimes, libraries, etc.) together in a nice tidy package, and its own IDE where you could just open up the thing, type in some code, and hit the big obvious "Run" button. Want a library? Download it from the nicely curated set that are guaranteed to work! Wanted to create an executable, click "Export", and it just works! All the nastiness of linking native dependencies, bundling the JRE, handling classpaths and linker flags, it was handled once by the devs working on that project, and end users could just focus on code.
Things are getting better with other technologies these days, but it's still rare that I see an environment as zero-config as Processing, apart from web-based Javascript playgrounds. All it takes is a pure focus on usability, which I think is something that as devs we often overlook because once we've gotten over the installation problems that we're familiar with ("well of course brew is better than MacPorts, and you'll need to install nvm and pick the right version before this library will work, except for this one dependency that's only available through RubyGems, and this other one that") we forget that they can be confusing and really off-putting to newbies.
Python environments are particularly bad, IMO because of screwy webs of dependencies that more often than not fail to install cleanly and the Python 2 vs 3 split.
On the other hand, Python's "batteries included" means you can go a long way without installing anything. Sometimes I think people forget to look in the stdlib:
> Python environments are particularly bad, IMO because of screwy webs of dependencies that more often than not fail to install cleanly and the Python 2 vs 3 split.
Which is why Python virtual environments are a thing, and I feel like more people should be taught to use them routinely.
Learning to program just takes a huge amount of frustration-tolerance. Fullstop. It's inherent in the craft and doesn't really ever go away - it's just the problems you face that change. So in that sense, complex setups are perhaps not our biggest problem.
Of course, that's no excuse for terrible interfaces. But I dare say there have been easy-to-use and not-so-easy-to-use programming setups in every era...
I don't understand this viewpoint at all. There's a breathtaking amount of tutorials, Q/A (stackoverflow), forums, chats, that can get someone started with a fraction of the effort it took for me to learn programming 20 years ago. There are one-click installers for programming languages and for IDEs. There are entire free books online to learn specific languages or frameworks.
I think people have gotten lazier and they expect to be taught, rather than seeking out materials. Or perhaps the people wishing to learn, are not as interested in programming as they think they are.
That being said, yes, learning "cloud" is an enormous sink of time that requires some exposure to lots of different silos of information. Doesn't that make sense though? It's a complicated subject.
As relatively young person I agree. Many people my age and/or younger expect quick results and don't really have the patience to see something through. But like with any other facet in life, if people take shortcuts they totally deprive themselves of vital experiences that are necessary for them in the long run if they want to experience any decent amount of success. Especially if they are wishing to learn something for their career.
In other words, if your objective is to learn programming, how can you possibly hope to create or do anything more meaningful than trivial examples without challenging yourself to learn the environment nor learning howto import 3rd party software libraries so that you don't have to recreate the wheel?
It's part and parcel of not doing anything trivial.
Learning to be resourceful by visiting Q/A websites, forums, chats and asking questions, and trying things and failing and getting up and trying again just makes you better.
You learn more by failure and experimentation than by following an example to a T but never venturing outside the sandbox.
My only response is this famous quote: "The children now love luxury. They have bad manners, contempt for authority; they show disrespect for elders and love chatter in place of exercise"
I don't think people per se have gotten lazier, but the fraction of the populace that wants to learn programming has increased. When the visibility of programming in society was small, the people who were attracted to it tended to bring along a very strong dedication to the task. As programming became more hip, more and more people were attracted to it, so the average level of determination sank...
Every single forum I frequented "back in the days" (ca. 2004, vBulletin-style) is gone. These were forums that hosted intense/focused technical discussions, in a way that just doesn't seem to exist anymore, with very few exceptions. At least I cannot find anything comparable. Today, there is just Reddit/HN and everything else is mostly commercialized and/or dumbed-down content. Don't even get me started on "educational" youtube videos.
I got my CS degree in 2012. It was kinda scary how many students were on the verge of graduation, and were unable to use a terminal, use SSH, or tell you what git is (not that I know exactly o_o).
Those aren't particularly complex concepts. It is definitely partially the schools fault, but CS is also a field where you have to have some interest in what you do. You can't just go through the motions.
I wasn't able to use version control at all when I graduated; I didn't even realize it was an option. I just every now and then would make a tar of my project in case I lost something.
I suppose I had copy/pasted some cvs commands from sourceforge in order to download the source of some open-source projects, but that was the full extent of my interactions with source control.
100% agree. To me it seems like most students aren't particularly interested in programming, none of them have side projects or care that much about the field.
I don't know if this is because some people are just looking for a good career path (This is not my experience from talking to my friends) or just weren't sure what to do with their lives other than they like computer gaming and computers.
The author is making an excuse for not including an intro chapter and tool in his book to get the reader to a place where they can start using the book. My sixth grader checked-out a Python game programming book from the school library. He was able to install all the tools necessary to follow along and learn from the book.
Today you have Google, Youtube and every programming language available from scratch to assembler at your fingertips. There is no way it is "harder".
Yea the C64 dropped you into basic. But this was my first experience on a Commodore 64:
"Play A Game"
-Syntax Error
"Play a Game of Chess"
-Syntax Error
"Let's play Global Thermonuclear War"
-Syntax Error
Well programming is one piece of the puzzle. I also miss the days when qbasic was preinstalled and easily accessible.
But what worries me more is the actual deployment of the application you write, which is getting more and more complex quite fast.
It seems, I'm in a rare place, where deployment consists of installing a database and extracting an zip file. There's a script you run and the (intranet) service is ready. Updates work exactly the same.
Sometimes I feel a bit ashamed, when clients watch me extracting a zip file, but then I experience deployments and updates of other so called enterprise systems and am completely baffled by their complexity.
Server provisioning and orchestration. Container managment. In memory caches. Sharded databases with master slave setups. Load balancing with health monitoring and what not... And to manage this mess you need a mix of bash scripts, fiddle with permissions, run terraform which itself runs ansible which deploys some docker containers... And when there's a tiny problem the guys in charge are completely roadblocked for weeks.
I have no idea how some people can live with so many layers of complexity and I fear the day, when I need to dig into this mess, eventually...
To add to this, one other way programming is getting harder is that there is no incremental path to becoming a developer. In the past, you could easily become a programmer by accident. You wanted to edit your MySpace page, google around, learn some HTML and do it. You wanted to mod a game, you started messing around with the game, download other mods, and change them.
I think this incrementally is gone in two ways. One is that programming is so abstracted away from how we use computers that it's almost in a different world. But even if you figured out what programming is, when you actually attempt to do it, the sophistication of our tools make it a lot harder to get started. Everything that makes us programmers more productive: compilers, build systems, package managers, etc make programming less accessible. There is a lack of coherence between all these tools, no one person designed them, they're the product of bottom-up innovation (the bazaar) which has the problem of making things messier.
I think open-source/bottom-up innovation is great, but eschewing "the cathedral" for a wholly bazaar-based approach is making it a lot harder to learn to program.
What I'm working on now (I'm the founder of Repl.it) is taking a lot of these awesome tools and putting a nicely designed experience on top of them. We want to bring back the welcoming cursor that invites you to program the computer and bring back incrementality to programming, you start from a repl, and from there you can move on to web-dev or what have you. You'd be surprised how fun it is for kids to build CLI programs before moving on to build other things. We put together a page where kids can post about what they're building with Repl.it and it's really inspiring to see: https://repl.it/ibuiltthis
I guess it depends on what you mean by "become a developer".
I think a lot of the increased difficulty is the skill of developers. At one point, knowing how to edit HTML would get you an interview. Now, I feel like I might need a successful Python library so I can get an interview...
Not sure if it's a bad thing or not, since the art is just becoming better.
We like to think programming is hard and that there's a barrier to entry that we somehow surmounted because we're oh so smart.
But does anyone here actually know people who learned to program within the last couple years?
My co-founder's girlfriend taught herself enough Javascript and React to help out on our front-end in a couple months. Had no experience except for dabbling in Wordpress. Now closes issues for us.
My buddy learned enough Python to create a GUI for an old card game. Built it to completion enough to challenge himself against the computer player. Hasn't programmed since.
Neither of them had any experience before. These posts really underrate the resourcefulness and intelligence of beginners. And my suspicion is because we like to think it's hard.
People here act like installing Homebrew to download python3 is somehow hard for a beginner when there are hundreds of tutorials online telling them how to do it. Hundreds of tutorials are exactly what I didn't have when I started programming Basic even though the hello-world was a little simpler.
One of the consequences of the transition from command-line interfaces such as DOS and Unix to contemporary GUIs such as macOS and Windows is we have moved from environments that do not make a sharp distinction between programmer and user to environments that make a sharp distinction. One of the nice things about command-line interfaces is being able to make powerful tools that are composed of smaller tools. Unix has a powerful collection of tools, and if those tools aren't powerful enough even with combined by pipes, there's awk and sed, and then there are scripting languages. Contemporary GUI applications, however, work very differently. Instead of being composed from smaller programs, many contemporary GUI applications such as Microsoft Word, Adobe Photoshop, and iTunes are large monoliths that are expensive to write (just consider how large the teams engineering these products are, and consider how much effort it would take to write a clone of these programs from scratch), difficult to combine, and are difficult to script unless they are specially designed to support scripting (e.g., AppleScript, Microsoft Visual Basic for Applications, etc.). Web applications are even harder to write than native GUI applications, and they are even more difficult to deal with in regards to interoperability and scriptability.
It didn't have to be this way, and there's room for a future where it doesn't have to be this way. The Smalltalk-76 environment demonstrated that it is possible to construct composable and interoperable GUI applications. The Genera operating system for LISP machines worked similarly. Apple's OpenDoc initiative would have introduced the wider world to the concept of composable GUIs, although it was canned as a consequence of Apple adopting the tried-and-true OpenStep platform as the basis of future Mac development. An operating system environment inspired by the Smalltalk environment and LISP machines that provides both a REPL for tasks that are equivalent the Unix command line and an OpenDoc-like API for designing composable GUI or even web applications would create an environment that is both easy to use and programmable. I've been growing more and more excited about the possibility of such an operating system for workstation users that could one day serve as an alternative to contemporary desktop operating systems and environments such as Windows, macOS, and the Linux desktop.
For me it looks like inverted survivorship bias. You won't hear from people that succeed so you don't have way to count them. People that nag or email author might be even in some special group of 'someone please make it work for me', I cannot imagine mailing author of a book. I do not believe that such group to be really big, maybe it just visible more than others. Like 'plz give codez' on StackOverflow.
Buying a book or reading blogpost does not entitle you to anything more, like wasting author time. Time is most valuable asset and he already spent it on writing book. If that book is crap you can rate it on Amazon or something but directly contacting author?
I work at JetBrains on https://datalore.io/ It's an interactive computational notebook for data science, which automatically recalculates code as you change it. We believe that such an interface lowers the barrier for entry into data science (and programming).
Looks great, though I can't find anything about pricing or pricing plans (looks like it's in open beta?)
While I've dabbled with using jupyter for teaching programming to high school students, on the whole its usually too difficult to get up and running for someone who's not already moderately tech savvy. Interface is everything when starting off; this looks quite promising if the pricing is affordable for schools
I agree that it's harder to learn to program now than in 1982 (in terms of "hello world" level simple stuff - but not for advanced stuff), but I believe that it's way easier now than in 1992 or 2002.
AppleScript might be an exception in the 1992 case, but it was a fairly specialized case and only for Macs. Otherwise, today you can google stuff easily (vs needing books and such) and even Windows supports installing Linux tools out of the box.
The danger, though, is that in the future we could have fewer and fewer general-purpose computers -- iOS is not as dev friendly as OS X.
However, even on general-purpose computers, don't seem that interested in making it easier, which is sad from a professional pride point of view if nothing else. I set up Android Studio on Linux recently. It wasn't terrible, but even that wasn't a seamless experience - the emulator stuff had a few problems, including included libs that were incompatible with Intel graphics drivers, that I had to work around.
Any time you join a company and have to browse a long dev environment setup wiki or readme, you've seen us all fail. We're bandaging it as fast as we can with stuff like Docker, but that's just delaying the problem until you have to debug your container in prod. ;)
My first computer was a VIC-20 (I later got a Commodore 64), where you also start with a BASIC prompt. I too have been thinking about to the barriers to starting to code.
Last fall, I helped in my son's grade 8 class to teach them python programming. There we wanted the students to be able to start coding with minimal effort, and minimal magic. They already had MacBook Airs, which had python 2.7 already installed, so there was nothing to install. Then we concentrated on a few core programming constructs (no classes for example), and no libraries. This was an attempt to recreate the environment I had when I learnt to program on the VIC-20.
I think it worked really well. The students were able to write fairly advanced (a few pages full of code) with that set-up. If you want to do more advanced programming, you'll need to install more, but for a start it was really good.
I've written more about it here:
I'll be honest with you. Programming is actually pretty easy to learn.
As long as you have a vague idea of how logic works and are eager to learn with the right approach, you can pick it up pretty quickly.
A lot of the concepts floated around in programming have crazy sounding names but are actually not that bad.
What's really hard to learn, however, is full on software engineering.
Knowing how something works end to end. Sure, you can learn to program well in JS, but that won't translate right away to knowing how to build an awesome website.
You can be an excellent java programmer, but that won't translate right away into architecting a nice Android app.
For me at least, when I was an up and comer, these were the things that were hard to put together.
Every tutorial site wants to jump into a lot of details right away - I wish they started with a high level overview of where you'd need the language, where it fits in in the larger "app" picture (where app can be a site, an app, etc.) and then dive into the specifics.
> Computer retailers stopped installing development environments by default
This is true, but somewhat ignores web browsers. The big ones (Chrome, Firefox, IE & Safari) all have complete and high quality dev environments.
The article is Python-centric, and so the best answer for that right now is: install Anaconda!
Otherwise, the general argument being made here is solved by JavaScript at the moment.
If you use JS to write code, there’s nothing to install, distribution is built in, it comes with the dev environment. All language and feature comparisons aside, this is the strongest reason to use JS, because it makes sharing programs with other people so insanely easy compared to any other language.
Honestly, if I were teaching someone to program now, I’d just tell them to buy a raspberry pi. For $50 for the nice kit, plus a surplus monitor + keyboard + mouse, you get a fully working toy dev environment preinstalled. You also get piles of programming tutorials written for that exact environment.
I personally know otherwise competent Java backend devs that have no idea how http works at all. Pipelining, gzip/deflate, Cache-control headers, XSS, uri concepts, bandwidth consumption, proxies, etc...not even the foggiest clue. There's just so much breadth, abstraction, inversion-of-control, and pressure to deliver in corporate environments. There's little incentive to be a big picture person when you're rewarded solely for closing out stories and pushing out change requests. The resulting hit in quality is atrocious.
There's another option the author doesn't consider: Change programming, or create fundamentally different programming paradigms that entirely obviate some of the requirements we have now.
One idea that's a fairly natural progression from where we are now is Luna, a WYSIWYG data processing language: http://www.luna-lang.org
A loftier re-imagining is Dynamicland, co-founded by Alan Kay and Bret Victor: https://dynamicland.org
[+] [-] socialist_coder|8 years ago|reply
Younger programmers seem to commonly have zero knowledge in this area. If they run into some problem with their environment, they are completely stuck. Oh, they're asked to install a VPN client but it doesn't work and they have to debug it? They're completely blocked. They have no idea how to continue.
For me, I learned these basic computer skills first (because I was obsessed with computers as a child). Then I learned to program.
I think this is a side effect of teaching programming as a career skill. You have people that want to be programmers but don't include "computing" as one of their hobbies. So of course they don't know anything about how to debug computer problems. This is totally expected.
Teaching these skills in CS curriculum would probably be a good idea.
[+] [-] userbinator|8 years ago|reply
Having taught some introductory CS courses a few years ago, the amount of struggling with basic things like file naming, directory hierarchies, and even simple hardware use was a constant distraction.
On one memorable occasion, I had to help a student by turning on the monitor: he would sit down at a workstation, move the mouse and tap the keyboard, and seeing nothing show up on the monitor after a moment, go to another unoccupied one. I watched, without intervention, him try this with all the unoccupied workstations in the lab until he finally came to me and said, in an exasperated tone, "all the computers left are broken!" I lead him over to one, and upon pressing the power button on the monitor, the expression he made was quite unforgettable...
[+] [-] TallGuyShort|8 years ago|reply
[+] [-] blackbagboys|8 years ago|reply
[+] [-] rconti|8 years ago|reply
That said, my background as a Sysadmin/Ops person also landed me in my own silo. I don't have much programming experience, and running production systems means NO, the environment does NOT give you access to wide-open CPAN, RPM, pip, whatever downloads. It's a regimented release process where someone upstream has to provide the relevant dependancies and you don't just go around installing stuff, running services, etc.
As a result of my background and not being a developer, on HN I hear of new languages/frameworks/libraries/methodologies on a daily basis. Things that, clearly, a large number of readers hear must already be familiar with, even though many of them will be out of fashion in 6 months.
And then the process to install a lot of these things is "oh, just pipe a wget of this script into bash, RPM install this, pip install that, don't worry, it's all quite safe for your system..."
In many ways, it feels like worlds are diverging.
[+] [-] sametmax|8 years ago|reply
Creating a program that meets todays' users expectations is what's harder.
But learning programming by itself, is way easier.
We have Python, Ruby, Javascript... We have the Web as a platform and as documentation. We have communities and cheap, fast computers.
The hello world has never been easier to do.
What's hard is to make a real time offline first SPA with a beautiful responsive design that uses the same API backend as the mobile app while integrating with third party Saas and leveraging social medias.
[+] [-] shakna|8 years ago|reply
We also used to have BASIC pre-installed on a lot of different systems, and were able to write a GUI just by writing to the frame buffer directly.
A helloworld was just:
I learned to program in BASIC, with just the on-disk manuals. I can't say that it's easier today - I didn't need anything extra back then, and had a snake game up and running in a couple days from never knowing programming.Today, we don't even have access to an unbuffered get_char by default, and you need to either modify how the shell is running or reach for a heavy library.
[+] [-] psyc|8 years ago|reply
[+] [-] rconti|8 years ago|reply
[+] [-] gameswithgo|8 years ago|reply
Can you explain how any of those things makes learning programming easier?
[+] [-] PricelessValue|8 years ago|reply
Agreed. The hard parts of programming have been removed ( especially for entry level people ).
> We have communities and cheap, fast computers.
And online tutorials ( youtube, coursera, etc ).
Learning to program today is much easier than just 10 years ago.
Not only that, the setup to start programming today is much simpler. Not only does almost everyone have a computer, there are IDEs/programming suites available that eases you into programming.
[+] [-] xstartup|8 years ago|reply
[+] [-] unknown|8 years ago|reply
[deleted]
[+] [-] sien|8 years ago|reply
In Commodore 64 days you got some book that was all you had. You couldn't email the author of the book or look online.
If you got through the huge filter of the initial steps being much harder than today then you were doing well and would go on.
However, the endless set ups and downloading every library that is used is going to make maintenance of programs in 5, 10 or 20 years a nightmare.
[+] [-] bitwize|8 years ago|reply
And even then, experts and resources were available online, for suitably primitive values of "online". Think CompuServe.
Another thing we had back then but less so today was magazines, full of programming and technical tips and info, usually tailored to a particular computer family. (So, Commodore magazines, Tandy magazines, Apple magazines, etc.) Once business computing took off, the dominant players (PCMag, MacWorld, etc.) became more productivity-oriented -- but I still learned Windows programming from the free utility and programming columns in early 90s PCMag. And then once the Web hit, the dead tree publishers were fighting over scraps.
[+] [-] PacketPaul|8 years ago|reply
[+] [-] ewjordan|8 years ago|reply
And compiling it all into a Real Executable that would run on Windows like a normal program? Forget about it...not even to get into Web Start, applets, Maven and JavaFX (remember that disaster?), oh my!
Then I discovered Processing, which bundled everything (Java runtimes, libraries, etc.) together in a nice tidy package, and its own IDE where you could just open up the thing, type in some code, and hit the big obvious "Run" button. Want a library? Download it from the nicely curated set that are guaranteed to work! Wanted to create an executable, click "Export", and it just works! All the nastiness of linking native dependencies, bundling the JRE, handling classpaths and linker flags, it was handled once by the devs working on that project, and end users could just focus on code.
Things are getting better with other technologies these days, but it's still rare that I see an environment as zero-config as Processing, apart from web-based Javascript playgrounds. All it takes is a pure focus on usability, which I think is something that as devs we often overlook because once we've gotten over the installation problems that we're familiar with ("well of course brew is better than MacPorts, and you'll need to install nvm and pick the right version before this library will work, except for this one dependency that's only available through RubyGems, and this other one that") we forget that they can be confusing and really off-putting to newbies.
Python environments are particularly bad, IMO because of screwy webs of dependencies that more often than not fail to install cleanly and the Python 2 vs 3 split.
[+] [-] icebraining|8 years ago|reply
https://docs.python.org/3/library/index.html
[+] [-] wrinkl3|8 years ago|reply
Which is why Python virtual environments are a thing, and I feel like more people should be taught to use them routinely.
[+] [-] veddox|8 years ago|reply
Of course, that's no excuse for terrible interfaces. But I dare say there have been easy-to-use and not-so-easy-to-use programming setups in every era...
[+] [-] edmundhuber|8 years ago|reply
I think people have gotten lazier and they expect to be taught, rather than seeking out materials. Or perhaps the people wishing to learn, are not as interested in programming as they think they are.
That being said, yes, learning "cloud" is an enormous sink of time that requires some exposure to lots of different silos of information. Doesn't that make sense though? It's a complicated subject.
[+] [-] racl101|8 years ago|reply
In other words, if your objective is to learn programming, how can you possibly hope to create or do anything more meaningful than trivial examples without challenging yourself to learn the environment nor learning howto import 3rd party software libraries so that you don't have to recreate the wheel?
It's part and parcel of not doing anything trivial. Learning to be resourceful by visiting Q/A websites, forums, chats and asking questions, and trying things and failing and getting up and trying again just makes you better.
You learn more by failure and experimentation than by following an example to a T but never venturing outside the sandbox.
[+] [-] jonny_eh|8 years ago|reply
My only response is this famous quote: "The children now love luxury. They have bad manners, contempt for authority; they show disrespect for elders and love chatter in place of exercise"
[+] [-] veddox|8 years ago|reply
[+] [-] kbwt|8 years ago|reply
Every single forum I frequented "back in the days" (ca. 2004, vBulletin-style) is gone. These were forums that hosted intense/focused technical discussions, in a way that just doesn't seem to exist anymore, with very few exceptions. At least I cannot find anything comparable. Today, there is just Reddit/HN and everything else is mostly commercialized and/or dumbed-down content. Don't even get me started on "educational" youtube videos.
[+] [-] ericmcer|8 years ago|reply
Those aren't particularly complex concepts. It is definitely partially the schools fault, but CS is also a field where you have to have some interest in what you do. You can't just go through the motions.
[+] [-] aidenn0|8 years ago|reply
I suppose I had copy/pasted some cvs commands from sourceforge in order to download the source of some open-source projects, but that was the full extent of my interactions with source control.
[+] [-] NTDF9|8 years ago|reply
[+] [-] Zpalmtree|8 years ago|reply
I don't know if this is because some people are just looking for a good career path (This is not my experience from talking to my friends) or just weren't sure what to do with their lives other than they like computer gaming and computers.
[+] [-] PacketPaul|8 years ago|reply
Today you have Google, Youtube and every programming language available from scratch to assembler at your fingertips. There is no way it is "harder".
Yea the C64 dropped you into basic. But this was my first experience on a Commodore 64:
"Play A Game" -Syntax Error
"Play a Game of Chess" -Syntax Error
"Let's play Global Thermonuclear War" -Syntax Error
[+] [-] fleitz|8 years ago|reply
[deleted]
[+] [-] zubspace|8 years ago|reply
But what worries me more is the actual deployment of the application you write, which is getting more and more complex quite fast.
It seems, I'm in a rare place, where deployment consists of installing a database and extracting an zip file. There's a script you run and the (intranet) service is ready. Updates work exactly the same.
Sometimes I feel a bit ashamed, when clients watch me extracting a zip file, but then I experience deployments and updates of other so called enterprise systems and am completely baffled by their complexity.
Server provisioning and orchestration. Container managment. In memory caches. Sharded databases with master slave setups. Load balancing with health monitoring and what not... And to manage this mess you need a mix of bash scripts, fiddle with permissions, run terraform which itself runs ansible which deploys some docker containers... And when there's a tiny problem the guys in charge are completely roadblocked for weeks.
I have no idea how some people can live with so many layers of complexity and I fear the day, when I need to dig into this mess, eventually...
[+] [-] amasad|8 years ago|reply
I think this incrementally is gone in two ways. One is that programming is so abstracted away from how we use computers that it's almost in a different world. But even if you figured out what programming is, when you actually attempt to do it, the sophistication of our tools make it a lot harder to get started. Everything that makes us programmers more productive: compilers, build systems, package managers, etc make programming less accessible. There is a lack of coherence between all these tools, no one person designed them, they're the product of bottom-up innovation (the bazaar) which has the problem of making things messier.
I think open-source/bottom-up innovation is great, but eschewing "the cathedral" for a wholly bazaar-based approach is making it a lot harder to learn to program.
What I'm working on now (I'm the founder of Repl.it) is taking a lot of these awesome tools and putting a nicely designed experience on top of them. We want to bring back the welcoming cursor that invites you to program the computer and bring back incrementality to programming, you start from a repl, and from there you can move on to web-dev or what have you. You'd be surprised how fun it is for kids to build CLI programs before moving on to build other things. We put together a page where kids can post about what they're building with Repl.it and it's really inspiring to see: https://repl.it/ibuiltthis
I've written more about what I call a "Holistic development service" here: http://repl.it/site/blog/holistic And also here I describe how we went wrong with "Disintegrated Development Environments — How Did We Get Here?": https://amasad.me/disintegrated
[+] [-] bomb199|8 years ago|reply
I think a lot of the increased difficulty is the skill of developers. At one point, knowing how to edit HTML would get you an interview. Now, I feel like I might need a successful Python library so I can get an interview...
Not sure if it's a bad thing or not, since the art is just becoming better.
[+] [-] always_good|8 years ago|reply
But does anyone here actually know people who learned to program within the last couple years?
My co-founder's girlfriend taught herself enough Javascript and React to help out on our front-end in a couple months. Had no experience except for dabbling in Wordpress. Now closes issues for us.
My buddy learned enough Python to create a GUI for an old card game. Built it to completion enough to challenge himself against the computer player. Hasn't programmed since.
Neither of them had any experience before. These posts really underrate the resourcefulness and intelligence of beginners. And my suspicion is because we like to think it's hard.
People here act like installing Homebrew to download python3 is somehow hard for a beginner when there are hundreds of tutorials online telling them how to do it. Hundreds of tutorials are exactly what I didn't have when I started programming Basic even though the hello-world was a little simpler.
[+] [-] smt88|8 years ago|reply
I've been coding for 22 years, and each year I feel like I can look back to the year before and say, "Wow, I sucked at programming then."
[+] [-] linguae|8 years ago|reply
It didn't have to be this way, and there's room for a future where it doesn't have to be this way. The Smalltalk-76 environment demonstrated that it is possible to construct composable and interoperable GUI applications. The Genera operating system for LISP machines worked similarly. Apple's OpenDoc initiative would have introduced the wider world to the concept of composable GUIs, although it was canned as a consequence of Apple adopting the tried-and-true OpenStep platform as the basis of future Mac development. An operating system environment inspired by the Smalltalk environment and LISP machines that provides both a REPL for tasks that are equivalent the Unix command line and an OpenDoc-like API for designing composable GUI or even web applications would create an environment that is both easy to use and programmable. I've been growing more and more excited about the possibility of such an operating system for workstation users that could one day serve as an alternative to contemporary desktop operating systems and environments such as Windows, macOS, and the Linux desktop.
[+] [-] scroot|8 years ago|reply
[+] [-] ozim|8 years ago|reply
Buying a book or reading blogpost does not entitle you to anything more, like wasting author time. Time is most valuable asset and he already spent it on writing book. If that book is crap you can rate it on Amazon or something but directly contacting author?
[+] [-] solomatov|8 years ago|reply
[+] [-] askvictor|8 years ago|reply
While I've dabbled with using jupyter for teaching programming to high school students, on the whole its usually too difficult to get up and running for someone who's not already moderately tech savvy. Interface is everything when starting off; this looks quite promising if the pricing is affordable for schools
[+] [-] sus_007|8 years ago|reply
[+] [-] majormajor|8 years ago|reply
AppleScript might be an exception in the 1992 case, but it was a fairly specialized case and only for Macs. Otherwise, today you can google stuff easily (vs needing books and such) and even Windows supports installing Linux tools out of the box.
The danger, though, is that in the future we could have fewer and fewer general-purpose computers -- iOS is not as dev friendly as OS X.
However, even on general-purpose computers, don't seem that interested in making it easier, which is sad from a professional pride point of view if nothing else. I set up Android Studio on Linux recently. It wasn't terrible, but even that wasn't a seamless experience - the emulator stuff had a few problems, including included libs that were incompatible with Intel graphics drivers, that I had to work around.
Any time you join a company and have to browse a long dev environment setup wiki or readme, you've seen us all fail. We're bandaging it as fast as we can with stuff like Docker, but that's just delaying the problem until you have to debug your container in prod. ;)
[+] [-] henrik_w|8 years ago|reply
Last fall, I helped in my son's grade 8 class to teach them python programming. There we wanted the students to be able to start coding with minimal effort, and minimal magic. They already had MacBook Airs, which had python 2.7 already installed, so there was nothing to install. Then we concentrated on a few core programming constructs (no classes for example), and no libraries. This was an attempt to recreate the environment I had when I learnt to program on the VIC-20.
I think it worked really well. The students were able to write fairly advanced (a few pages full of code) with that set-up. If you want to do more advanced programming, you'll need to install more, but for a start it was really good. I've written more about it here:
https://henrikwarne.com/2017/12/17/programming-for-grade-8/
[+] [-] gxs|8 years ago|reply
As long as you have a vague idea of how logic works and are eager to learn with the right approach, you can pick it up pretty quickly.
A lot of the concepts floated around in programming have crazy sounding names but are actually not that bad.
What's really hard to learn, however, is full on software engineering.
Knowing how something works end to end. Sure, you can learn to program well in JS, but that won't translate right away to knowing how to build an awesome website.
You can be an excellent java programmer, but that won't translate right away into architecting a nice Android app.
For me at least, when I was an up and comer, these were the things that were hard to put together.
Every tutorial site wants to jump into a lot of details right away - I wish they started with a high level overview of where you'd need the language, where it fits in in the larger "app" picture (where app can be a site, an app, etc.) and then dive into the specifics.
[+] [-] dahart|8 years ago|reply
This is true, but somewhat ignores web browsers. The big ones (Chrome, Firefox, IE & Safari) all have complete and high quality dev environments.
The article is Python-centric, and so the best answer for that right now is: install Anaconda!
Otherwise, the general argument being made here is solved by JavaScript at the moment.
If you use JS to write code, there’s nothing to install, distribution is built in, it comes with the dev environment. All language and feature comparisons aside, this is the strongest reason to use JS, because it makes sharing programs with other people so insanely easy compared to any other language.
[+] [-] DanBC|8 years ago|reply
https://news.ycombinator.com/item?id=11637866
VS I'm not claiming BASIC is a good language, or that it teaches good programming. But it is very easy to use.[+] [-] hedora|8 years ago|reply
[+] [-] tyingq|8 years ago|reply
[+] [-] jakelazaroff|8 years ago|reply
One idea that's a fairly natural progression from where we are now is Luna, a WYSIWYG data processing language: http://www.luna-lang.org
A loftier re-imagining is Dynamicland, co-founded by Alan Kay and Bret Victor: https://dynamicland.org