I counted everything from my single-digit Applesoft BASIC years onward. (After all, the question wasn't "How long have you been programming professionally?")
I went with years I've been paid full time as a software engineer(6 yrs) but then instantly rued that choice fondly remembering doing sprite graphics on my C64.
Also started with the 6502 in the late 70s, but it was entered in hex through the KIM-1. I was a teenager, and part of my brain was wired while understanding that computer.
Me too, I was writing label printing software for the Apple II. Even the simplest operations were a lot of work but it was nice being able to hold the whole environment in your head.
Interesting. When I wrote my first lines, I was excited by possibilities, viewing code as a means to an end. But now, after a year or two, I often identify as a programmer.
I'm not entirely proud of this. It's like a carpenter who favors his tools over the product. A hammer swinger, rather than a home builder.
I think it's OK to be proud of your abilities. The products will come along in time, you will build them, folks will enjoy them, you'll make some money, and then you'll also learn to be glad when they're obsolete and you've moved on to the next thing.
A lot of what I did, as a high school kid in 1981, was to make mistakes and then figure out how to make good of it. What happened to me is that I kinda sat out the explosion of computer science, while studying other things that I was interested in, such as math and physics. While I'm a good "lone wolf" programmer, I know none of the skills or techniques that would allow me to function in a production software development environment. I'm dependent on a real programming team for that kind of work.
I am counting my time struggling with C in the mid 90s, and cracking on Perl in the late 90s. Professionally since 2002 so Right in with the biggest group of the curve so far.
And hey you with 50+ years... we want to hear from you!
Starting with GW-BASIC in third grade... soon moved to QBASIC, which had a fancy GUI (if you can call it that). I was lucky to have a parent who knew some programming. I was the only person my age I knew who could program a computer until I was in high school.
The first time I had access to a computer, via a teletype with Basic, was in the early 1960s. A few years later while in high school, I took a programming extension class at a local university and I got to use punched cards, joy of joys :-)
I think it was a little before that. My Dad was the director of a think tank and they sometimes had early access to stuff. I think that 1964 was the public release date. That said, I could be off by a year or two - I was a kid then, a long time ago!
Teach Yourself Visual C++ in 21 Days (1998). Still the best version of the IDE IMHO. Took intro to CS (in C) and APCS (in C++) in freshman and sophomore years of HS. The first class was mandatory at my HS.
Visual Studio 6? Still have that installed, though I haven't done C++ on Windows in over a decade. Still remember it fondly, though, especially the debugger.
I did my earliest programming on a Bally Arcade console with a BASIC cartridge you could plug in. This would have been somewhere in the mid 80's, say between 83-87 or so.
But as far as "serious" programming goes... I started teaching myself C in the early 90's. Let's call it 92 or thereabouts. From C I "graduated" to C++ and eventually shifted to being primarily a Java programmer by the early 2000's (2002 or so) with a little dabbling in RPG/400, Visual Basic, REXX, etc. here and there.
I've been programming for about 12 years (rough timeline of my first ~5 programming years: TI Basic -> z80 assembly -> C -> C++ / PHP), which, as of one month ago, is exactly half of my life. I also have a M.Sc. in CS (PhD dropout).
I've been working as a web engineer in the SF bay area for about two years. Before that, I was doing academic research, freelance, indie game development, developing interactive systems (openframeworks, processing, etc.), contributing to open source projects (mostly in the Linux world), worked as an iOS dev for 1.5 years, and a few other things.
I'm noticing two things:
1) I know more than a lot of people my age in SV about things completely unrelated to startups & web/app development, like ray tracing, assembly, the Linux kernel, how an X server works, the history of UNIX, obscure programming languages like APL/Prolog/Ada/..., APIs no one talks about like Qt, theory of computation, formal algorithm verification, etc. etc. etc.
2) But when it comes to things specific to working as a web engineer in the Bay Area (Agile, TDD, etc.), I still have tons to learn.
It's good and bad: good because I'm learning a lot and having fun doing it, but also frustrating because I don't get to use 90% of what I know on a daily basis. It also often feels like web dev is just not on the same intellectual level as something like graphics programming, which is frustrating to me (although I feel bad, elitist, and potentially misdirected for making such a judgement).
Its different skills. I used to work on stuff I think is pretty "sexy" (software defined radios, networking algorithms, line rate packet analysis in high end network equipment), but I don't have the spatial skills at all to do web or GUI programming.
That said, it is a little unfortunate how the trend towards hyper specialization and buzzword of the day-ism discourages people from being what I consider "well read" in terms of CS education.
I'm not quite in the same boat, but everything I do these days is related to webdev, and pretty much all of the sites I work on are not technically difficult (data is in the hundreds of thousands of database rows, tasks are straightforward "take data from here, do very basic aggregation, and put it there"), so I can relate to the sense that lots (not all) of web development is not on the same level of complexity.
The thing that makes it seem that way is that webdev has a low barrier to entry. A person can get a website doing pretty impressive things from a user's perspective without understanding a lot of the fundamental pieces that are helping them along.
What I've noticed is that webdev can be very complex, but in not-so-obvious ways. For example (and none of these are exclusive to webdev):
- Web development brings together a stupid amount of different components. The number of acronyms between a string of text on your server and a rendered webpage on your user's computer is absurd, and learning the ins and outs of all of them is daunting. There's server software that actually runs your web app, the layers of networking that get the output to the user, the mini-Operating-System that is the web browser to render your output, and more.
- Websites are very often meant to be seen by tons of people at the same time. Everyone wants to make a popular website, but that brings with it concurrency and scaling problems.
- Most websites don't get to choose who their users are. They come with many different types of software, and have many different types of hardware, from many different places around the world. This has performance issues, localization issues, and UX issues.
- The web technology stack evolves quickly for a bunch of reasons. You may have a strong opinion of trying out new tech vs. keeping a stable stack over the long term (what does long term mean for you, anyway? 5 years? 10? 50?), but there's benefits and disadvantages to either side, and generally it means you have to keep tabs on the latest developments so that you don't fall behind.
If I had to shorten this, I'd say that the complexity in web development lies not in depth, but in breadth. An effective web developer is a jack of all trades.
IMO, developers underestimate the actual costs of adding a new tech/layer/interface to their design which is why they use "a stupid amount of different components".
I suspect that's also why new architectures/langues can catch on so fast. They don't really have to be much better just avoiding the cruft is a huge leg up until the next wave of small 3rd party library's show up and tracing a bug can once again involve tracing though 50+ files.
Just to clarify, by "stupid amount of different components" I meant more that a typical visit to website can involve tons of different, standalone components: Database, application server, cache, load balancer, CDN, browser, etc.
Your comment seems more focused on libraries, frameworks, and languages, but I may be reading it wrong.
As a counter example. This website does not use a CDN, cache, load balancer, or from what I understand even a Database yet it's ranked ~1,515 in the US by alexa. Which is probably why it's also fairly low maintenance.
That's a fair point, although there's a few caveats (HN uses CloudFlare I think, and replace "database" with "filesystem" and it's still another component to deal with).
My counter-argument would be that HN is able to avoid a lot of the complexity due to the nature of what it does. Oftentimes the value in adding a new component is maintainability vs doing it the simple way, which is one of the tradeoffs I was referring to earlier. Imagine scaling Google Analytics.
Creepy... That is the exact progression I had... Well, if you throw perl in there around the C/PHP part. What projects did you do with z80? I created the Usgard OS/shell with some stunningly brilliant kids from around the world for the TI85.
TI Basic -> Z80 ASM here too! Love it. I wrote a lot of stuff for the TI-83.
I was out of coding for about 10 years (traveled, went to business school, worked in finance). Then I got back into it by moonlighting for a startup. Now I'm CPO of a startup and write backend stuff in Ruby. I rarely get to use any of my old ASM coding chops.
How about a kernel with preemptive multitasking, dynamic memory management, a tree-based filesystem, cross-platform binaries, and the comforts of Unix?
I kind of in the same boat. Wrote html, vb4, and made a few flash apps when I was about 10 but didn't get serious and really study until the past 5 years or so. So I picked 15-20, but I also picked 3-5.
95 comments
[ 2.8 ms ] story [ 149 ms ] thread(Yes, I'm trying to subtly point out that either the question or options are wrong)
In the early 90s I wrote a short text adventure on my own as part of a high school project.
My college CS curriculum had a lot of programming.
I started professionally in 1996.
I put in 20-30 years; but if you want to get technical it may be above 30.
Professionally? Never. Programming has always been a hobby, or a tool for the pursuit of other things.
I'm not entirely proud of this. It's like a carpenter who favors his tools over the product. A hammer swinger, rather than a home builder.
A lot of what I did, as a high school kid in 1981, was to make mistakes and then figure out how to make good of it. What happened to me is that I kinda sat out the explosion of computer science, while studying other things that I was interested in, such as math and physics. While I'm a good "lone wolf" programmer, I know none of the skills or techniques that would allow me to function in a production software development environment. I'm dependent on a real programming team for that kind of work.
And hey you with 50+ years... we want to hear from you!
(Though, if we count html: Maybe a decade?)
But as far as "serious" programming goes... I started teaching myself C in the early 90's. Let's call it 92 or thereabouts. From C I "graduated" to C++ and eventually shifted to being primarily a Java programmer by the early 2000's (2002 or so) with a little dabbling in RPG/400, Visual Basic, REXX, etc. here and there.
I've been working as a web engineer in the SF bay area for about two years. Before that, I was doing academic research, freelance, indie game development, developing interactive systems (openframeworks, processing, etc.), contributing to open source projects (mostly in the Linux world), worked as an iOS dev for 1.5 years, and a few other things.
I'm noticing two things:
1) I know more than a lot of people my age in SV about things completely unrelated to startups & web/app development, like ray tracing, assembly, the Linux kernel, how an X server works, the history of UNIX, obscure programming languages like APL/Prolog/Ada/..., APIs no one talks about like Qt, theory of computation, formal algorithm verification, etc. etc. etc.
2) But when it comes to things specific to working as a web engineer in the Bay Area (Agile, TDD, etc.), I still have tons to learn.
It's good and bad: good because I'm learning a lot and having fun doing it, but also frustrating because I don't get to use 90% of what I know on a daily basis. It also often feels like web dev is just not on the same intellectual level as something like graphics programming, which is frustrating to me (although I feel bad, elitist, and potentially misdirected for making such a judgement).
Anyone in the same boat?
That said, it is a little unfortunate how the trend towards hyper specialization and buzzword of the day-ism discourages people from being what I consider "well read" in terms of CS education.
The thing that makes it seem that way is that webdev has a low barrier to entry. A person can get a website doing pretty impressive things from a user's perspective without understanding a lot of the fundamental pieces that are helping them along.
What I've noticed is that webdev can be very complex, but in not-so-obvious ways. For example (and none of these are exclusive to webdev):
- Web development brings together a stupid amount of different components. The number of acronyms between a string of text on your server and a rendered webpage on your user's computer is absurd, and learning the ins and outs of all of them is daunting. There's server software that actually runs your web app, the layers of networking that get the output to the user, the mini-Operating-System that is the web browser to render your output, and more.
- Websites are very often meant to be seen by tons of people at the same time. Everyone wants to make a popular website, but that brings with it concurrency and scaling problems.
- Most websites don't get to choose who their users are. They come with many different types of software, and have many different types of hardware, from many different places around the world. This has performance issues, localization issues, and UX issues.
- The web technology stack evolves quickly for a bunch of reasons. You may have a strong opinion of trying out new tech vs. keeping a stable stack over the long term (what does long term mean for you, anyway? 5 years? 10? 50?), but there's benefits and disadvantages to either side, and generally it means you have to keep tabs on the latest developments so that you don't fall behind.
If I had to shorten this, I'd say that the complexity in web development lies not in depth, but in breadth. An effective web developer is a jack of all trades.
I suspect that's also why new architectures/langues can catch on so fast. They don't really have to be much better just avoiding the cruft is a huge leg up until the next wave of small 3rd party library's show up and tracing a bug can once again involve tracing though 50+ files.
Your comment seems more focused on libraries, frameworks, and languages, but I may be reading it wrong.
My counter-argument would be that HN is able to avoid a lot of the complexity due to the nature of what it does. Oftentimes the value in adding a new component is maintainability vs doing it the simple way, which is one of the tradeoffs I was referring to earlier. Imagine scaling Google Analytics.
I was out of coding for about 10 years (traveled, went to business school, worked in finance). Then I got back into it by moonlighting for a startup. Now I'm CPO of a startup and write backend stuff in Ruby. I rarely get to use any of my old ASM coding chops.
https://github.com/KnightOS/kernel
How about a kernel with preemptive multitasking, dynamic memory management, a tree-based filesystem, cross-platform binaries, and the comforts of Unix?
Sue me.
Still trust that bell curve?