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?
After a while they switched from the Mark V service to a company called COMShare, whose timesharing system ran on an SDS 940. They had several languages on this machine -- Fortran IV, I think, which I started to learn so I could help my stepfather with his numerical codes; Snobol, which I didn't do much with; a long-forgotten language called CAL, which I learned much later had been created by Butler Lampson of PARC and Alto fame; and a macro assembler. I'll never forget opening the macro assembler manual and seeing an example that started:
MUMBLE MACRO
I don't think I figured out at the time what a macro was or that that this was a declaration of one, and its name was "mumble". Nor did I quite realize that "mumble" was just a common metavariable. These mysteries were revealed later in my education.A couple of years later, my stepfather's company switched to using a CDC 6400 via a remote batch terminal, consisting of a card reader, a line printer, a CRT console, and a 9600 bps modem -- many tens of thousands of dollars' worth of equipment, I'd guess. The CRT display would sometimes go on the fritz. I figured out where to hit it with my hand to make it come back on.
I got pretty good at Fortran and started to learn to read the 6400's assembly language. At one point I started to study the optimizing Fortran compiler's output. This made a great impression on me as I couldn't imagine how it did some of its optimizations. To me, then, that was AI.
The problem? I had to reinstall MS-DOS on that crap, but I couldn't pirate Dad's copy because it came in 3.5" floppies and my 286 only had 5.25" drives. (IIRC Linux was not compatible with 286 PCs, either.) That was the beginning of my foray into hacking.
21 years later, I still don't do programming "professionally", i.e. my primary source of income isn't from programming. But I don't care because I was never in it for the money, I just like to tinker with things.
I learned to program by reading every page of every BYTE magazine, as they arrived at my local library. Then my junior-high school principal noticed this, and gave all of his, so I could take them home to read. These issues were roughly the size of a telephone book ^w^w four iPads and featured glorious art by Robert Tinney [1].
One "game" however was "Basic". I read the manual and started writing trivial songs in basic..
Good memory, fun time!
Would be longer but my intelligent parents reasoned not to give me a computer so early .. age 11 was the beginning ... I resented them for years for waiting too long, now I am thankful. Earliest days .. invented some batch file viruses on MSDOS 5.0 but was too scared to type them in. Later, typed them in anyway. Unable to find a teacher or a C compiler. Desperately trying to get a modem. Finally getting a modem. Writing POVRay scenes using constructive solid geometry and waiting 45 minutes for a single low resolution rendering on a 486 (IIRC). Sharing them with girls on the BBSs, pre-internet. Fantasizing about running a BBS, and even programming a spaghetti-code emulator in BASIC. Re-implementing nibbles.bas with flamethrowers and remote-detonation time bombs. Running to Burger King after school to pore over TCP/IP Illustrated Volume 1: The Protocols and invent new, then unknown remote OS detection techniques using ARP and ICMP. Pirating games like System Shock by scurrying up and down the street with wads of 5.25", and later 3.5" disks. Installing Slackware and laughing every time "bison: a parser generator in the style of yacc" appeared. Making all of my BASIC habits worse by learning perl. Good times.
(Yes, I'm trying to subtly point out that either the question or options are wrong)
Blessed enough to have Indian parents who bought me a computer at unproportional cost to my dad's middle class government salary, discovering the joy of creation, the magic of computer graphics, the wonders of 3D modeling and gaming (Michael Abrash's book was my first inspiration, I still have all my books from back then), pulling night outs at college computer lab, wide eyed at Internet and the black IRC chat window, ending up in enterprise software as a professional, fortunate enough to be enlightened on the intricacies of enterprise software by the veterans of BaaN software (it runs Boeing), lucky enough to build 3 enterprise software platforms from scratch and now the fourth one is by running my enterprise mobility PaaS company from India with a team of wonderful young new generation developers who beat me squarely at my old game!
Thank you for evoking all the nostalgia :-)
I started building things in PHP pretty shortly after that. Not sure how early that was, but I distinctly remember building a gradebook system for my 4th grade teacher during class. I used to finish up my classwork early and jet over to the computer to work on it. I don't think it wound up being fully functional at the end, though.
It's interesting being in my very early twenties and saying I've been programming for 10+ years. On HN this isn't very unique, but in the public-at-large people tend to look at me with either suspicion or amazement. Though, I usually immediately follow saying "10 years" with, "Though, that doesn't mean I was any good for most of them... ;)"
Fun stuff.
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.
Those books were enthralling, each game had an illustrated background behind the source regarding the theme of the game and it got me excited about it before I started entering it into the computer.
Unfortunately, I've lost those books and can't seem to find out anything about them at all. I'm incredibly nostalgic about them and would love to get my hands on some of them again, I'd love to hear if anyone knows anything about them.
Fast forward a lot, I make stuff on the web every day for a living. No regrets.
Went from that to Pascal, to C, to Assembly, back to C/C++, then Java. Was still developing in Java until about 5 years ago, when I migrated over to "Architect" roles. Have since toyed in both Ruby/Rails and Python on side projects to keep from getting too rusty and to learn something new.
And hey you with 50+ years... we want to hear from you!
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.
Writing this, I'm struck by the progression of what we are programming. The internet of things is next, followed perhaps by more general-purpose robots. How long before we're programming ourselves?
(Though, if we count html: Maybe a decade?)
Sue me.
Still trust that bell curve?
I finished school two years ago and I'm currently looking for scholarships (undergrad level, would like to study in North America or Europe).
Currently working for ScrapingHub, doing stuff with Python :)
Now work as a web developer. Professionally, a bit over 3 years.
Many languages since then, many domains.
Still programming. Likely to never stop.
Had a couple of generic games published for the C64 in my teens though. Back of magazine fodder, nothing great.
I left the industry entirely for ten years due to burnout after the bubble, in 2001.
burnout is harsh. take time to live your life outside of work!
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.